公告區

Work Harder!!!!

2009年6月7日 星期日

5/31團練記錄:ACM 260

團練主題:State Space Search

/*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真抱歉 冏

1 則留言: