标签:
题目:两人轮流在n*n的平行四边形格子中放入黑白两色的棋子,
如果黑色方能给创造一个从1~n行的连续线段则黑方胜,否则白方胜利。
分析:图论,搜索。利用dfs或floodfill求解,寻找从顶端能到达低端的解即可。
说明:目标600题╮(╯▽╰)╭。
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> using namespace std; char maps[202][202]; int dxy[6][2] = {-1,-1,-1,0,0,-1,0,1,1,0,1,1}; int dfs(int x, int y, int n) { if (x == n) return 1; if (x < 0 || x >= n || y < 0 || y >= n) return 0; if (maps[x][y] != 'b') return 0; maps[x][y] = '#'; int max = 0; for (int k = 0 ; k < 6 ; ++ k) max |= dfs(x+dxy[k][0], y+dxy[k][1], n); return max; } int main() { int n,t = 1; while (~scanf("%d",&n) && n) { for (int i = 0 ; i < n ; ++ i) scanf("%s",maps[i]); int flag = 0; for (int i = 0 ; i < n ; ++ i) if (maps[0][i] == 'b' && dfs(0, i, n)) flag = 1; printf("%d ",t ++); if (flag) printf("B\n"); else printf("W\n"); } return 0; }
标签:
原文地址:http://blog.csdn.net/mobius_strip/article/details/44099851