poj 1753 Flip Game

我的第一道dfs。。做了好久好久。。在别人博客的帮助下做出了。。
几个月后自己写。。发现不过如此。。(好虚啊,好虚啊)。。

#include<stdio.h>
int flag=0;
int game[10][10];
void flip(int x,int y)
{
 game[x][y]=!game[x][y];
 game[x+1][y]=!game[x+1][y];
 game[x][y+1]=!game[x][y+1];
 game[x-1][y]=!game[x-1][y];
 game[x][y-1]=!game[x][y-1];
 }
int judge()
{
 int i,j;
 for(i=1;i<=4;i++)  for(j=1;j<=4;j++) if(game[i][j]!=game[1][1]) return 0; return 1; } int dfs(int x,int y,int stepme,int stepyou) { if(stepme==stepyou) { flag=judge(); return 0; } if(flag==1) return 0; if(y>4)
 return 0;
  flip(x,y);//翻了这步棋//
  if(x<4)  dfs(x+1,y,stepme,stepyou+1); else dfs(1,y+1,stepme,stepyou+1); flip(x,y);//翻回来,就当没翻过感觉这就是flip的神奇之处!// if(x<4) dfs(x+1,y,stepme,stepyou); else dfs(1,y+1,stepme,stepyou); } int main() { char map1; int i,j,stepme; for(i=1;i<=4;i++) { for(j=1;j<=4;j++) { scanf("%c",&map1); if(map1=='b') game[i][j]=1; else game[i][j]=0; } getchar(); } for(stepme=0;stepme<=16;stepme++)//顶多翻16次,枚举步数,判断是否符合// { dfs(1,1,stepme,0); if(flag==1) break; } if(flag==1) printf("%d\n",stepme); else printf("Impossible\n"); return 0; }

突然发现颜色好丰富啊。。

你可能感兴趣的:(枚举,poj,DFS)