描述
在程序設計實踐課上,老師給大家布置下了這樣的實驗任務:編寫一個五子棋應用程序
勝負判定是五子棋程序最核心的部分。給出當前棋盤的狀態,請你完成對五子棋勝負的判定(僅考慮當前狀態,不考慮后續落子)
規則:在水平、垂直或對角線方向形成5個以上棋子連續的一方獲勝
輸入:
輸入第一行為一個整數?t?(1≤t≤100),代表一共有?t?組輸入
對于每組輸入:
第一行一個整數?n?(1≤n≤20),代表棋盤的大小為?n×?n
之后的?n?行,每行包含一個長度為?n?的字符串,代表當前棋盤的狀態,其中空位用字符.
表示,黑棋、白棋分別用字符B
W
表示
輸入保證只會出現勝負未定、黑棋勝利、白棋勝利三種情況(即最多只會有一方有5連子)
輸出:
輸出?t?行 ,分別為每組輸入的勝負結果
若黑棋勝利輸出"Black", 若白棋勝利輸出"White",若勝負未定則輸出"Not so fast"
輸入樣例:
3
5
WWWWW
BBBB.
.....
.....
.....
5
B...W
.B.W.
..B..
.W.B.
W...B
5
.....
.....
.....
.....
.....
輸出樣例:
White Black Not so fast
代碼實現:
#include<stdio.h>
#include<string.h>
char s[21][21];
int extend(int n,int i,int j)
{if(s[i][j]=='.')return 0;int sum=0;int x=i;while(x<n&&s[x][j]==s[i][j]){x++,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}int y=j;sum=0;while(y<n&&s[i][y]==s[i][j]){y++,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}x=i,y=j,sum=0;while(x<n&&y<n&&s[x][y]==s[i][j]){x++,y++,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}x=i,y=j,sum=0;while(x<n&&y>=0&&s[x][y]==s[i][j]){x++,y--,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}return 0;
}
int judge(int n)
{for(int i=0;i<n;i++){getchar();for(int j=0;j<n;j++){scanf("%c",&s[i][j]);}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){int res=extend(n,i,j);if(res>0)return 1;else if(res<0)return -1;}}return 0;
}
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int res=judge(n);if(res>0){printf("White\n");}else if(res<0){printf("Black\n");}else printf("Not so fast\n");}return 0;
}