标签:cpp nim cin roman sample article std field important
转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents
题目链接:http://poj.org/problem?id=1753
----------------------------------------------------------------------------------------------------------------------------------------------------------
欢迎光临天资小屋:http://user.qzone.qq.com/593830943/main
----------------------------------------------------------------------------------------------------------------------------------------------------------
Description
Input
Output
Sample Input
bwwb bbwb bwwb bwww
Sample Output
4
题意:找出能使4X4的棋盘中的棋子同色的最小步数。
代码例如以下:
#include <iostream> #include <cstring> using namespace std; int chess[7][7];//事实上利用的仅仅有中心的4x4 int x[5] = {0,0,1,0,-1}; int y[5] = {0,1,0,-1,0}; int flag, step; int judge(int chess[7][7])//推断颜色是否所有同样 { for(int i = 1; i <= 4; i++) { for(int j = 1; j <= 4; j++) { if(chess[i][j] != chess[1][1]) return 0; } } return 1; } void flip(int row, int col)//翻棋 { for(int i = 0; i <= 4; i++) { if(chess[row+x[i]][col+y[i]] == 1) chess[row+x[i]][col+y[i]] = 0; else chess[row+x[i]][col+y[i]] = 1; } return; } void dfs(int row,int col, int deep)//深搜固定步数看能否同色 { if(deep == step) { flag = judge(chess); return; } if(flag || row == 5) return; flip(row,col); if(col < 4) dfs(row,col+1,deep+1); else dfs(row+1,1,deep+1); flip(row,col);//不符合就翻回之前的状态 if(col < 4) dfs(row,col+1,deep); else dfs(row+1,1,deep); return; } int main() { char temp; int i, j; memset(chess,0,sizeof(chess)); for(i = 1; i <= 4; i++) { for(j = 1; j <= 4; j++) { cin >>temp; if(temp == ‘b‘) chess[i][j] = 1; } } for(step = 0; step <= 16; step++) {//对每一步进行枚举(Enum) dfs(1,1,0); if(flag) break; } if(flag) cout<<step<<endl; else cout<<"Impossible"<<endl; return 0; }
标签:cpp nim cin roman sample article std field important
原文地址:http://www.cnblogs.com/jzdwajue/p/6815646.html