POJ 1753 Flip Game ------- DFS & 位运算 .
2013-03-14 12:55
381 查看
#include<iostream> using namespace std; int visited[16]; int Flip(int s,int i) { int mstate=s; mstate^=1<<i; if ((i-4)>=0) { mstate ^=1<<(i-4); } if (i%4!=0) { mstate ^= 1<<(i-1); } if ((i+1)%4!=0) { mstate ^= 1<<(i+1); } if (i<12) { mstate ^= 1<<(i+4); } return mstate; } int DFS(int state,int level,int now,int last) { int i; if (level==now) { if (state==0 || state==65535) { return 1; } else { return 0; } } else { /*if (16-last<level-now) { return 0; }*/ for (i=last;i<16;i++) { //state=Flip(state,i); if (visited[i]==1) { continue; } else { visited[i]=1; state=Flip(state,i); } if (DFS(state,level,now+1,i)) { return 1; } visited[i]=0; state=Flip(state,i); } return 0; } } int main(int argc, char* argv[]) { char str[17]; int i; int state =0; i=0; memset(visited,0,sizeof(visited)); while (i<16) { cin>>str[i]; if (str[i]=='b') { state += 1<<i; } i++; } str[i]='\0'; if (state ==0 || state ==65535) { cout<<0<<endl; } else { for (i=1;i<=16;i++) { memset(visited,0,sizeof(visited)); if (DFS(state,i,0,0)) break; } if (i>16) { cout<<"Impossible"<<endl; } else { cout<<i<<endl; } } return 0; }
相关文章推荐
- POJ 1753 Flip Game ------- BFS & 位运算
- POJ 1753-Flip Game(枚举&&DFS)
- DFS.枚舉::poj1753 flip game && poj2965 the Pilots Brothers'refrigerator
- poj 1753 Flip Game(枚举,dfs)
- [ACM] POJ 1753 Flip Game (枚举,BFS,位运算)
- POJ 1753 Flip Game(dfs+枚举)
- POJ 1753 Flip Game (DFS)
- POJ 1753 Flip Game (枚举 + 位运算)
- 【dfs】poj1753——Flip Game
- POJ 1753 Flip Game【暴搜DFS】
- poj 1753 Flip Game (dfs)
- POJ 1753 Flip Game (DFS)
- poj 1753 Flip Game(dfs)_但是
- POJ 1753 Flip Game(回溯查找,dfs)
- poj 1753 Flip Game (dfs)
- POJ 题目1753 Flip Game(DFS)
- POJ--1753--Flip Game【DFS】
- poj 1753 Flip Game (dfs + 枚举)
- POJ 1753 Flip Game(DFS)
- poj 1753 Flip Game(bfs状态压缩 或 dfs枚举)