标签:
状压+打表+bfs即可。ccz大神扫一眼:异或。。。遂秒
------------------------------------------------------------------------------------
#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
int a[5][5]={0,0,0,0,0,0,19,39,78,140,0,305,626,1252,2248,0,4880,10016,20032,35968,0,12544,29184,58368,51200};
queue<int>q;
int ans=0;
bool v[65536];
int d[65535];
int main(){
for(int i=1;i<=4;i++){
char c[4];
scanf("%s",c);
for(int j=0;j<4;j++){
if(c[j]==‘b‘)
ans+=(1<<4*(i-1)+j);
}
}
q.push(ans);
v[ans]=true;
d[ans]=0;
if(ans==65535||ans==0){
printf("0\n");
return 0;
}
while(!q.empty()){
int tmp=q.front();
q.pop();
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++){
int t=tmp^a[i][j];
if(!v[t]){
d[t]=d[tmp]+1;
if(t==65535||t==0){
printf("%d\n",d[t]);
return 0;
}
q.push(t);
v[t]=true;
}
}
}
printf("Impossible\n");
return 0;
}
------------------------------------------------------------------------------------
标签:
原文地址:http://www.cnblogs.com/fighting-to-the-end/p/4896051.html