1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorithm> 6 #include <queue> 7 #include <stack> 8 #include <vector> 9 using namespace std; 10 char a[6][6]; 11 int flag,mi; 12 int dir[6][2]={0,0,-1,0,1,0,0,-1,0,1}; 13 int judge() 14 { 15 for(int i=0;i<4;i++) 16 { 17 for(int j=0;j<4;j++) 18 { 19 if(a[i][j]!=a[0][0]) 20 return 0; 21 } 22 } 23 return 1; 24 } 25 void fanpai(int x,int y) 26 { 27 int p,q; 28 if(a[x][y]==‘b‘) 29 a[x][y]=‘w‘; 30 else 31 a[x][y]=‘b‘; 32 if (x-1>=0) 33 if (a[x-1][y]==‘b‘) 34 a[x-1][y]=‘w‘; 35 else a[x-1][y]=‘b‘; 36 if (x+1<4) 37 if (a[x+1][y]==‘b‘) 38 a[x+1][y]=‘w‘; 39 else a[x+1][y]=‘b‘; 40 if (y-1>=0) 41 if (a[x][y-1]==‘b‘) 42 a[x][y-1]=‘w‘; 43 else a[x][y-1]=‘b‘; 44 if (y+1<4) 45 if (a[x][y+1]==‘b‘) 46 a[x][y+1]=‘w‘; 47 else a[x][y+1]=‘b‘; 48 /* 49 for(int i=0;i<5;i++) 50 { 51 p=x+dir[i][0]; 52 q=y+dir[i][1]; 53 if(p>=0&&p<4&&q>=0&&q<4) 54 { 55 if(a[p][q]==‘b‘) 56 a[p][q]==‘w‘; 57 else 58 a[p][q]==‘b‘; 59 } 60 }*/ 61 } 62 void dfs(int x,int y,int coun) 63 { 64 if(judge()) 65 { 66 flag=1; 67 mi=min(mi,coun); 68 return; 69 } 70 if(x>=4||y>=4) return; 71 int nx,ny; 72 nx=(x+1)%4; 73 ny=y+(x+1)/4; 74 dfs(nx,ny,coun); 75 fanpai(x,y); 76 dfs(nx,ny,coun+1); 77 fanpai(x,y); 78 return; 79 80 } 81 int main(int argc, char *argv[]) 82 { 83 84 for(int i=0;i<4;i++) 85 scanf("%s",a[i]); 86 flag=0;mi=9999999; 87 dfs(0,0,0); 88 if(flag) 89 printf("%d\n",mi); 90 else 91 printf("Impossible\n"); 92 return 0; 93 }
原文地址:https://www.cnblogs.com/huluxin/p/9759701.html
时间: 2024-09-26 20:09:14