cf-754B Ilya and tic-tac-toe game(搜索查找)

https://codeforces.com/problemset/problem/754/B

题意:

一个4*4的棋盘,每个单元可能是‘x’,‘o’,‘.’,的一种。其中“.”,代表当前单元没有棋子,“o”代表当前单元有乙的棋子,“x”代表当前单元有甲的棋子。现在需要判断:如果下一步轮到甲下棋,他能否获胜?(胜利的规则是棋盘上有自己方的3个子在一条线上,这条线可以是水平,竖直或倾斜45度)

思路:

因为棋盘只有4*4,所以暴力搜索查找即可,判断一下如果是x,周围八个方向是否满足胜利条件,flag标记即可。

代码:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<iomanip>
#include<algorithm>
#include<string.h>
#include<queue>
#include<cmath>
#include<stack>

using namespace std;
const int maxn=1e5+10;
const int inf=1e10;
typedef long long ll;

char a[4][4];
int dx[8]={0,0,1,-1,1,-1,1,-1};
int dy[8]={1,-1,0,0,1,-1,-1,1};

int main()
{
    for(int i=0; i<4; i++) cin>>a[i];
    int flag=0;
    for(int i=0; i<4; i++)
    {
        for(int j=0; j<4; j++)
        {
            if(a[i][j]=='x')
            {
                for(int k=0; k<8; k++)
                {
                    if(i+2*dx[k]>=0&&i+2*dx[k]<4&&j+2*dy[k]>=0&&j+2*dy[k]<4)
                    {
                        int temp=0;
                        for(int m=1; m<=2; m++)
                        {
                            if(a[i+dx[k]*m][j+dy[k]*m]=='x')
                             temp++;
                            else if(a[i+dx[k]*m][j+dy[k]*m]=='.')
                             continue;
                            else temp--;
                        }
                        if(temp>=1) {
                            flag=1;
                            break;
                        }
                    }
                }
            }
        }
    }
    if(flag) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    //system("pause");
    return 0;
}

 

posted on 2021-02-01 10:04  mmn  阅读(78)  评论(0编辑  收藏  举报