题意:
黑白两方下棋,必有一人胜出,若黑棋能从第一行走到最后一行则Black胜出,若白棋能从能从第一列走到最后一列则White胜出
思路:
只需判断Black是否胜出,用dfs搜索黑棋能否能从第一行走到最后一行
#include <iostream>
using namespace std;
int N,flag=0;
int dx[]={1,0,1,0,-1,-1};//记录六个方向
int dy[]={0,-1,1,1,-1,0};
char board[205][205];//声明棋盘
void initial(int N)
{
for(int i=0;i<N;i++)
{
for(int k=0;k<N;k++)
{
cin>>board[i][k];
}
}
}
void dfs(int x,int y)
{
int ny,nx,m;
board[x][y]='.';//若访问过置为‘.‘
for(int i=0;i<6;i++)
{
nx=x+dx[i];
ny=y+dy[i];
if(nx>=0&&nx<N&&ny>=0&&ny<N&&board[nx][ny]=='b')
{
m=nx;//记录当前行数
if(m==0)//若行数为1
flag=1;//flag记为1
dfs(nx,ny);
}
}
}
int main()
{
int i=0,k;
while(cin>>N&&N)
{
flag=0;
i++;
initial(N);
for(k=0;k<N;k++)
{
if(board[N-1][k]=='b')
{
dfs(N-1,k);//从最后一行开始搜索
if(flag)
{
cout<<i<<" "<<'B'<<endl;
break;
}
}
}
if(flag==0)
cout<<i<<" "<<'W'<<endl;
}
return 0;
}