1. 程式人生 > >POJ 1753(枚舉)

POJ 1753(枚舉)

mes poj mat stream dfs turn void \n tor

 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 }

POJ 1753(枚舉)