题目大意:

给你一个五子棋棋局,让你找一下是不是可以接下来下一个子就赢。

代码:

#include<bits/stdc++.h>
using namespace std;
#define maxn 10

char a[maxn][maxn]={0};
int mv[4][2]={{1,1},{1,0},{0,1},{-1,1}};

bool try_find(int x,int y)
{
    a[x][y]='X';
    for(int i=0;i<4;i++)
    {
        int num=0;int k=0;
        while(a[x+k*mv[i][0]][y+k*mv[i][1]]=='X')
        {
            k++;num++;
            if(x+k*mv[i][0]<0||x+k*mv[i][0]>=10||y+k*mv[i][1]<0||y+k*mv[i][1]>=10)break;
        }
        k=0;
        while(a[x+k*mv[i][0]][y+k*mv[i][1]]=='X')
        {
            k--;num++;
            if(x+k*mv[i][0]<0||x+k*mv[i][0]>=10||y+k*mv[i][1]<0||y+k*mv[i][1]>=10)break;
        }
        num--;
        if(num>=5)return 1;
    }
    a[x][y]='.';
    return 0;
}

int main()
{
    for(int i=0;i<maxn;i++)
    {
        scanf("%s",a[i]);
    }
    bool flag=0;
    for(int i=0;i<maxn;i++)
    {
        for(int j=0;j<maxn;j++)
        {
            if(a[i][j]=='.'&&try_find(i,j)==1)
            {
                flag=1;
                break;
            }
        }
        if(flag==1)break;
    }
    if(flag==1)printf("YES");
    else printf("NO");
}