1 #include <iostream> 2 using namespace std; 3 int num=0; 4 int minnum=100; 5 void flip(int step); 6 void fanzhuan(int x,int y); 7 char map[4][4]; 8 bool same(); 9 bool safe(int x,int y); 10 int Dx[4]={0,0,1,-1}; 11 int Dy[4]={1,-1,0,0}; 12 int data[4]; 13 int n[16]={0}; 14 int main() 15 { 16 for(int i=0;i<4;i++) 17 { 18 for(int j=0;j<4;j++) 19 { 20 cin >>map[i][j]; 21 } 22 } 23 24 flip(0); 25 if(minnum<1000000) 26 { 27 cout <<minnum<<endl; 28 } 29 else 30 { 31 cout <<"Impossible"<<endl; 32 } 33 return 0; 34 } 35 36 37 38 void flip(int row,int col,int deep) 39 { 40 41 if(deep==step) 42 { 43 flag=isOver(); 44 return; 45 } 46 if(flag || row==5) 47 { 48 return; 49 } 50 flip(row,col); 51 if(col<4) 52 { 53 dfs(row,col+1,deep+1); 54 } 55 else 56 { 57 dfs(row+1,1,deep+1); 58 } 59 flip(row,col); 60 if(col<4) 61 { 62 dfs(row,col+1,deep); 63 } 64 else 65 { 66 dfs(row+1,1,deep); 67 } 68 return; 69 } 70 71 72 73 74 75 76 77 void fanzhuan(int x,int y) 78 { 79 int mx; 80 int my; 81 if(safe(x,y)) 82 { 83 if(map[x][y]=='b') 84 map[x][y]='w'; 85 else map[x][y]='b'; 86 } 87 for(int i=0;i<4;i++) 88 { 89 mx=x+Dx[i]; 90 my=y+Dy[i]; 91 if(safe(mx,my)) 92 { 93 if(map[mx][my]=='b') 94 map[mx][my]='w'; 95 else map[mx][my]='b'; 96 } 97 } 98 } 99 bool safe(int x,int y) 100 { 101 bool ret=true; 102 if(x>=4||x<0||y>=4||y<0) 103 ret=false; 104 return ret; 105 } 106 bool same() 107 { 108 bool ret=true; 109 for(int i=0;i<4;i++) 110 { 111 for(int j=0;j<4;j++) 112 { 113 if(map[i][j]!='b') 114 ret=false; 115 } 116 } 117 if(ret==false) 118 { 119 ret=true; 120 for(int i=0;i<4;i++) 121 { 122 for(int j=0;j<4;j++) 123 { 124 if(map[i][j]!='w') 125 ret=false; 126 } 127 } 128 } 129 return ret; 130 }