#include<cstring>
#include<cstdio>
#include<string>
#include<stack>
#include<map>
#include<list>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
char s[6][6];
int sn[6][6];
int flag;
int deep;
int jude(){
int nw,nb;
nw=nb=1;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(sn[i][j]!=0){
nw=0;
}
}
if(!nw)
break;
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(sn[i][j]!=1){
nb=0;
}
}
if(!nb)
break;
}
if(nb||nw)
return 1;
return 0;
}
void change(int row,int col){
if(row>0)
sn[row-1][col]=!sn[row-1][col];
if(row<3)
sn[row+1][col]=!sn[row+1][col];
if(col>0)
sn[row][col-1]=!sn[row][col-1];
if(col<3)
sn[row][col+1]=!sn[row][col+1];
sn[row][col]=!sn[row][col];
return;
}
void bfs(int row,int col,int cnt){
if(deep==cnt){
// printf("%d %d\n",row,col);
// for(int i=0;i<4;i++){
// for(int j=0;j<4;j++){
// printf("%d ",sn[i][j]);
// }
// printf("\n");
// }
// printf("\n");
// system("pause");
flag=jude();
return;
}
if(flag||col==4){
return;
}
change(row,col);
if(row<3)
bfs(row+1,col,cnt+1);
else
bfs(0,col+1,cnt+1);
change(row,col);
if(row<3)
bfs(row+1,col,cnt);
else
bfs(0,col+1,cnt);
}
int main(){
for(int i=0;i<4;i++){
scanf("%s",s[i]);
}
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(s[i][j]=='w')
sn[i][j]=0;
else
sn[i][j]=1;
}
}
// for(int i=0;i<4;i++){
// for(int j=0;j<4;j++){
// printf("%d ",sn[i][j]);
// }
// printf("\n");
// }
flag=0;
for(deep=0;deep<=16;deep++){
bfs(0,0,0);
if(flag){
break;
}
}
if(flag){
printf("%d\n",deep);
}
else{
printf("Impossible\n");
}
return 0;
}
Flip Game POJ - 1753
最新推荐文章于 2020-10-19 12:46:15 发布