/*Applerman's AC code*/
#include< stdio.h>
int N, map[200][200],win,check[200][200];
int move[6][2]={{-1,-1},{-1,0},{0,-1},{1,0},{0,1},{1,1}};
int isBound(int i,int j);
void move_W(int i,int j);
void check_W(int i,int j);
int init(int N);
int main(){
int case_N=1,i,j;
char win_C[2]={'B','W'},str[201];
while(scanf("%d\n",&N)==1){
if(N==0) break;
for(i=0;i< N;i++){
gets(str);
for(j=0;j< N;j++)
if(str[j]=='w') map[i][j]=1;
else if(str[j]=='b') map[i][j]=0;
}
init(N);
win=0;
for(i=0;i< N&&(!win);i++)
if(map[i][0]&&check[i][0])
check_W(i,0);
printf("%d %c\n",case_N++,win_C[win]);
}
return 0;
}
int isBound(int i,int j){
if( (0< =i&&i< N) && (0< =j&&j< N) )
return 1;
return 0;
}
void check_W(int i,int j){
int k;
check[i][j]=0;
if((j==(N-1)&&map[i][j]==1)||win==1){
win=1;
return;
}
for(k=0;k< 6;k++)
move_W(i+move[k][0],j+move[k][1]);
return ;
}
void move_W(int i,int j){
if(isBound(i,j))
if(map[i][j]&&check[i][j]) check_W(i,j);
}
int init(int N){
int i,j;
for(i=0;i< N;i++)
for(j=0;j< N;j++)
check[i][j]=1;
}
這一次的題目比較簡單
因為白及黑的行為模式已經確立
而且題目又很準確的說
「不會平手」
所以比較投機的方式就是只檢查一方會不會贏XD
//拖了這麼久才po真抱歉 冏
不會不會,你絕對不是拖最久的!!
回覆刪除