题目:两人轮流在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;
}