龙神宝物的博弈:3x3棋盘游戏,小申能否获胜?
龙神宝物的博弈:小申能否获胜?
小申和小广历经千辛万苦终于找到了传说中的龙神殿。大殿里面有一个 3*3 的棋盘(9 个格子),起初每个格子均没有放置棋子。
现在小申得到了一盒黑棋,小广得到了一盒白棋。两人轮流行动,每次可以将一个棋子放入棋盘的格子内。
若某个人放置一个棋子后,该棋子与另外两个棋子(不论是谁放置的都可以)达成三子连线(即三个棋子连成一条线,水平、垂直、主副对角线均可),则该人获胜。获胜的人也将得到龙神的宝物。
小申总是先手。若小申将第一个棋子放在(x,y)的格子内后,小申是否会获胜。(小申和小广每次放棋子都是采取最优的策略)
输入格式
第一行输入两个正整数 x,y,1 ≤ x,y ≤ 3,表示小申第一个棋子放置的格子坐标。
输出格式
若小申将第一个棋子放置于格子(x,y)后,最终会获胜,则输出'hhhh ye'(不含引号),否则输出'oh no'(不含引号)
样例 #1
样例输入 #1
2 2
样例输出 #1
hhhh ye
c++ code内容:
#include<bits/stdc++.h>
using namespace std;
int a[4][4];
int main()
{
int x,y;
cin>>x>>y;
a[x][y]=1;//小申先下
for(int i=1;i<=9;i++)
{
int x1,y1;
if(a[1][1]==a[1][2]&&a[1][2]==a[1][3]&&a[1][3]||a[2][1]==a[2][2]&&a[2][2]==a[2][3]&&a[2][3]||a[3][1]==a[3][2]&&a[3][2]==a[3][3]&&a[3][3]||a[1][1]==a[2][1]&&a[2][1]==a[3][1]&&a[3][1]||a[1][2]==a[2][2]&&a[2][2]==a[3][2]&&a[3][2]||a[1][3]==a[2][3]&&a[2][3]==a[3][3]&&a[3][3]||a[1][1]==a[2][2]&&a[2][2]==a[3][3]&&a[3][3]||a[1][3]==a[2][2]&&a[2][2]==a[3][1]&&a[3][1])//判断是否有三个相同的
{
cout<<'oh no'<<endl;
return 0;
}
if(i%2==0)//小广下
{
int sum=0;
for(int x2=1;x2<=3;x2++)
{
for(int y2=1;y2<=3;y2++)
{
if(a[x2][y2]==0)//判断是否有空位
{
a[x2][y2]=2;//小广下
if(a[1][1]==a[1][2]&&a[1][2]==a[1][3]&&a[1][3]||a[2][1]==a[2][2]&&a[2][2]==a[2][3]&&a[2][3]||a[3][1]==a[3][2]&&a[3][2]==a[3][3]&&a[3][3]||a[1][1]==a[2][1]&&a[2][1]==a[3][1]&&a[3][1]||a[1][2]==a[2][2]&&a[2][2]==a[3][2]&&a[3][2]||a[1][3]==a[2][3]&&a[2][3]==a[3][3]&&a[3][3]||a[1][1]==a[2][2]&&a[2][2]==a[3][3]&&a[3][3]||a[1][3]==a[2][2]&&a[2][2]==a[3][1]&&a[3][1])
{
a[x2][y2]=0;//如果下在该位置以后会赢,就不下
sum=1;
break;
}
a[x2][y2]=0;//小广下完后要记得吧棋子拿走
}
}
if(sum==1)
{
break;
}
}
if(sum==0)//如果没有下在可以赢的位置,就随便下
{
for(int x2=1;x2<=3;x2++)
{
for(int y2=1;y2<=3;y2++)
{
if(a[x2][y2]==0)
{
a[x2][y2]=2;
break;
}
}
}
}
}
else//小申下
{
int sum=0;
for(int x2=1;x2<=3;x2++)
{
for(int y2=1;y2<=3;y2++)
{
if(a[x2][y2]==0)
{
a[x2][y2]=1;
if(a[1][1]==a[1][2]&&a[1][2]==a[1][3]&&a[1][3]||a[2][1]==a[2][2]&&a[2][2]==a[2][3]&&a[2][3]||a[3][1]==a[3][2]&&a[3][2]==a[3][3]&&a[3][3]||a[1][1]==a[2][1]&&a[2][1]==a[3][1]&&a[3][1]||a[1][2]==a[2][2]&&a[2][2]==a[3][2]&&a[3][2]||a[1][3]==a[2][3]&&a[2][3]==a[3][3]&&a[3][3]||a[1][1]==a[2][2]&&a[2][2]==a[3][3]&&a[3][3]||a[1][3]==a[2][2]&&a[2][2]==a[3][1]&&a[3][1])
{
a[x2][y2]=0;
sum=1;
break;
}
a[x2][y2]=0;
}
}
if(sum==1)
{
break;
}
}
if(sum==0)
{
for(int x2=1;x2<=3;x2++)
{
for(int y2=1;y2<=3;y2++)
{
if(a[x2][y2]==0)
{
a[x2][y2]=1;
break;
}
}
}
}
}
}
cout<<'hhhh ye'<<endl;//如果没有人赢就小申赢
return 0;
}
原文地址: https://www.cveoy.top/t/topic/n4ar 著作权归作者所有。请勿转载和采集!