五子棋裁判

描述

在程序设计实践课上,老师给大家布置下了这样的实验任务:编写一个五子棋应用程序

胜负判定是五子棋程序最核心的部分。给出当前棋盘的状态,请你完成对五子棋胜负的判定**(仅考虑当前状态,不考虑后续落子)**

规则:在水平、垂直或对角线方向形成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

代码实现:

cpp 复制代码
#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;
}
相关推荐
信奥卷王3 分钟前
2025年9月GESPC++四级真题解析(含视频)
数据结构·c++·算法
朔北之忘 Clancy5 分钟前
第一章 顺序结构程序设计(2)
c++·算法·青少年编程·竞赛·教材·考级·讲义
橘颂TA10 分钟前
【剑斩OFFER】算法的暴力美学——力扣 1046 题:最后一块石头的重量
算法·leetcode·职场和发展
Ccjf酷儿12 分钟前
C++语言程序设计 (郑莉)第十一章 流类库与输入/输出
开发语言·c++
ldccorpora12 分钟前
GALE Phase 1 Distillation Training数据集介绍,官网编号LDC2007T20
人工智能·深度学习·算法·机器学习·自然语言处理·语音识别
有一个好名字13 分钟前
力扣- 统计二叉树中好节点的数目
算法·leetcode·职场和发展
jimy114 分钟前
创建链表注意项(三):使用内存池减少malloc开销(用标志位或空闲链表)
数据结构·链表
CSDN_RTKLIB16 分钟前
【字符编码】constexpr、char[]赋值汉字
c++
啟明起鸣20 分钟前
【C++ 面向对象编程】补档:线程池和 MySQL 连接池的设计模式分析
开发语言·c++·mysql
jghhh0127 分钟前
三维热传导方程和泊松方程的有限元方法MATLAB实现
开发语言·算法·matlab