标签:
Flip Game
Time Limit: 1000MS Memory Limit: 65536K
Description
Input
Output
Sample Input
bwwbSample Output
4#include<iostream> using namespace std; const int N = 4; bool map[N][N],flag; int step; //判断全白或全黑 bool judge(){ int i,j; for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ){ if( map[i][j] != **map ) return false; } return true; } //翻转棋子 void flip(int i, int j){ map[i][j] = !map[i][j]; if( i > 0 ) map[i-1][j] = !map[i-1][j]; if( i < 3 ) map[i+1][j] = !map[i+1][j]; if( j > 0 ) map[i][j-1] = !map[i][j-1]; if( j < 3 ) map[i][j+1] = !map[i][j+1]; } void dfs(int i, int j, int dp){ if( dp == step ){ flag = judge(); return; } if( flag || i == N ) return; flip(i,j);//翻转 if( j < 3 ) dfs(i,j+1,dp+1); else dfs(i+1,0,dp+1); flip(i,j);//还原 if( j < 3 ) dfs(i,j+1,dp); else dfs(i+1,0,dp); } int main(void){ int i,j; char c; for( i = 0; i < N; i++ ) for( j = 0; j < N; j++ ){ cin >> c; if( c == ‘b‘ ) map[i][j] = 1; } //枚举翻转次数 for( step = 0; step <= 16; step++ ){ dfs(0,0,0); if( flag ){ cout << step <<endl; return 0; } } cout << "Impossible" <<endl; return 0; }
测试数据:
bwbw
wwww
bbwb
bwwb
Impossible
bwwb
bbwb
bwwb
bwww
4
wwww
wwww
wwww
wwww
0
bbbb
bbbb
bbbb
bbbb
0
bbbb
bwbb
bbbb
bbbb
Impossible
bwbb
bwbb
bwbb
bbbb
Impossible
bwbb
wwwb
bwbb
bbbb
1
wwww
wwwb
wwbb
wwwb
1
wwww
wwww
wwwb
wwbb
1
wbwb
bwbw
wbwb
bwbw
Impossible
bbbb
bwwb
bwwb
bbbb
4
bwwb
wbbw
wbbw
bwwb
4
bbww
bbww
wwbb
wwbb
Impossible
bbwb
bbbw
wwbb
wwwb
Impossible
wwwb
wwbw
wbww
wwbw
Impossible
bbbb
wwww
wwbb
wbbb
Impossible
bwwb
wbwb
wbbb
wbbb
4
bwbb
bwbb
bwbw
bbbw
5
wbwb
bbbb
bbww
wbbb
6
bbwb
bbbb
wbwb
bbbb
5
标签:
原文地址:http://www.cnblogs.com/MrWhite083/p/5185474.html