Tic-Tac-Toe-(暴力模拟)

Posted shoulinniao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tic-Tac-Toe-(暴力模拟)相关的知识,希望对你有一定的参考价值。

https://ac.nowcoder.com/acm/contest/847/B

#include<algorithm>
#include<cstring>
#include<iostream>
#include<math.h>
#include<string>
#include<stdio.h>
#include<map>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;

char a[3][5];
int t;

bool check()
{
    int num1=0,num2=0;///白子数,空位数
    for(int i=0;i<3;i++)///横的
    {
        num1=0;num2=0;
        for(int j=0;j<3;j++)
        {
            if( a[i][j]==W )
                num1++;
            else if( a[i][j]==# )
                num2++;
            else
                break;
        }
        if(num1==2 && num2==1)
            return true;
    }

    for(int j=0;j<3;j++)///竖的
    {
        num1=num2=0;
        for(int i=0;i<3;i++)
        {
            if( a[i][j]==W )
                num1++;
            else if( a[i][j]==# )
                num2++;
            else
                break;
        }
        if(num1==2 && num2==1)
            return true;
    }
    num1=num2=0;
    for(int i=0;i<3;i++)///左上到左下
    {
        if( a[i][i]==W )
               num1++;
        else if( a[i][i]==# )
            num2++;
        else
            break;
    }
    if(num1==2 && num2==1)
        return true;
    num1=num2=0;
    for(int i=0;i<3;i++)///左下到右上
    {
        if(i==0)
        {
            if( a[2][0]==W )
                num1++;
            else if( a[2][0]==# )
                num2++;
            else if( a[2][0]==B)
                break;
        }
        if(i==1)
        {
            if( a[1][1]==W )
                num1++;
            else if( a[1][1]==# )
                num2++;
            else if( a[1][1]==B)
                break;
        }
        if(i==2)
        {
            if( a[0][2]==W )
                num1++;
            else if( a[0][2]==# )
                num2++;
            else if( a[0][2]==B)
                break;
        }
    }
    if(num1==2 && num2==1)
        return true;
    return false;
}


int main()
{
    scanf("%d",&t);
    while(t--)
    {
        int flag;
        flag=0;
        for(int i=0;i<3;i++)
            scanf("%s",a[i]);
        if(check())///正常情况下一步能赢
        {
            for(int i=0;i<3&&flag==0;i++)
            {
                for(int j=0;j<3&&flag==0;j++)
                {
                    if( a[i][j]==W )
                    {
                        a[i][j]=#;
                        if(!check())
                            flag=1;///存在某种情况被拿了之后不能赢
                        a[i][j]=W;
                    }
                }
            }
            if(flag==0)
                printf("Alice\n");
            else
                printf("Emmm\n");
        }
        else
        {
            printf("Bob\n");
        }
    }
    return 0;
}

 

以上是关于Tic-Tac-Toe-(暴力模拟)的主要内容,如果未能解决你的问题,请参考以下文章

bfs codeforces 754B Ilya and tic-tac-toe game

HDU 1032 [The 3n + 1 problem] 暴力模拟

牛牛学走路(模拟+暴力)

Vicious Keyboard CodeForces - 801A (暴力+模拟)

LeetCode1486. 数组异或操作(Java/c++ 暴力模拟)

LeetCode1486. 数组异或操作(Java/c++ 暴力模拟)