本文主要是介绍五子棋裁判,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述
在程序设计实践课上,老师给大家布置下了这样的实验任务:编写一个五子棋应用程序
胜负判定是五子棋程序最核心的部分。给出当前棋盘的状态,请你完成对五子棋胜负的判定(仅考虑当前状态,不考虑后续落子)
规则:在水平、垂直或对角线方向形成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;
}
这篇关于五子棋裁判的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!