生活随笔
收集整理的這篇文章主要介紹了
POJ 1753 Flip Game DFS枚举
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
看題傳送門:http://poj.org/problem?id=1753
DFS枚舉的應用。
基本上是參考大神的。。。。
學習學習。。
#include<cstdio>
#include<iostream>
using namespace std;
int n,s,d,ans;
bool a[5][5],flag=false;//判斷全部一樣的情況
bool alllike()
{for(int i=0;i<4;i++)for(int j=0;j<4;j++) if(a[i][j]!=a[0][0])return false;return true;
}//翻轉棋
void flip(int r,int c)
{if(r>0) a[r-1][c]=!a[r-1][c];if(c>0) a[r][c-1]=! a[r][c-1];if(r<3)a[r+1][c]=!a[r+1][c];if(c<3)a[r][c+1]=!a[r][c+1];a[r][c]=!a[r][c];
}void dfs(int r,int c,int deep)
{if(deep==ans){flag=alllike();return;}if(r==4||flag) return;flip(r,c); //翻轉棋if(c<3)dfs(r,c+1,deep+1);else dfs(r+1,0,deep+1);flip(r,c); //把棋翻回來if(c<3) //如果不滿足則不翻轉該棋dfs(r,c+1,deep);else dfs(r+1,0,deep);return;
}int main()
{char c;for(int i=0;i<4;i++) for(int j=0;j<4;j++){scanf("%c",&c);if(j==3)getchar();// cin>>c; //直接用cin也可以if(c=='b')a[i][j]=true;else a[i][j]=false;}for(ans=0;ans<=16;ans++){dfs(0,0,0);if(flag)break;}if(flag)printf("%d\n",ans);elseprintf("Impossible\n");}
轉載于:https://www.cnblogs.com/murmured/p/5004273.html
總結
以上是生活随笔為你收集整理的POJ 1753 Flip Game DFS枚举的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。