#include<cstdio>
#include<iostream>
using namespace std;
int state=(1<<16)-1;
int dir[4][2]={0,1,1,0,0,-1,-1,0};
char str1[5][5],str[5][5];
int main(){
for(int i=0;i<4;i++)
scanf("%s",str1[i]);
int Min=20;
int ss;
int sum;
bool flag;
//printf("state=%d\n",state);
for(int i=0;i<state;i++){
ss=i;
flag=true;
sum=0;
for(int c=0;c<4;c++)
for(int d=0;d<4;d++)
str[c][d]=str1[c][d];
for(int j=0;j<16;j++){
if( ss&(1<<j)){
//puts("Debug");
sum++;
int x=j/4,y=j%4;
if(str[x][y]=='w') str[x][y]='b';
else str[x][y]='w';
for(int z=0;z<4;z++){
int ex=x+dir[z][0];
int ey=y+dir[z][1];
if(ex<0 || ex>3 || ey<0 || ey>3) continue;
if(str[ex][ey]=='w') str[ex][ey]='b';
else str[ex][ey]='w';
}
}
}
for(int a=0;a<4;a++)
for(int b=0;b<4;b++){
if(a==0 && b==0) continue;
if(str[a][b]!=str[0][0])
flag=false;
}
if(flag==true && Min>sum){
//puts("Debug");
Min=sum ;
}
}
/*for(int a=0;a<4;a++){
for(int b=0;b<4;b++)
printf("%c",str[a][b]);
puts("");
}*/
//printf("%d\n",11&(1<<3));
if(Min==20)
printf("Impossible\n");
else
printf("%d\n",Min);
}
poj 1753状态压缩水题一发
最新推荐文章于 2017-07-20 16:26:10 发布