黑白棋(落子)绞尽脑汁 与老师模式强烈不兼容的思路(不推荐)
来源:互联网 发布:巴基手套知乎 编辑:程序博客网 时间:2024/04/30 01:34
Problem D
黑白棋(落子)
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
经过前3题的热身相信大家已经对黑白棋有了一定的认识,下面我们来编写稍微复杂一点的模块。黑白棋并不像5子棋或者围棋一样可以在任意空白处下子,那么检测某个位置是否可以下子(如对规则还不是很了解,请参照前3题的规则介绍),也是我们黑白棋AI算法会经常调用的模块。下面需要同学们编写这一检测模块。
输入:
首先读入的是当前棋盘的状态,共8行,每行8个数字,1代表白棋,2代表黑棋,0代表为空格(未下子)。第9行有3个数字R C N,分别代表给定点的行、列还有所要下子的颜色。
输出:
输出对于这个位置是否可以落子,可以输出Yes,不可以则输出No.
输入样例:
0 0 0 0 0 0 0 00 0 0 0 0 0 1 00 0 0 2 0 2 0 00 0 1 2 2 2 0 00 0 0 2 1 0 0 00 0 0 2 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 02 4 1
输出样例:
Yes
来源:
#include<stdio.h>
int R,C,N;
int a[8][8];
void init();
int main()
{
intflag=1;
inti;
init();
if(a[R][C]==0)
{
if(C>=1){
for(i=C-1;i>=0;i--)//zuo
{
if(a[R][i]==0)
{
flag=0;
break;
}
if(a[R][i]==N&& a[R][i+1]==0 && i+1<8)
{
flag=0;
break;
}
if(a[R][i]==N&& a[R][i+1]!=N)
break;
if(i==0&& a[R][i]!=N)
{
flag=0;
break;
}
}
}
else
flag=0;
if(flag==0)
{
flag=1;
if(C<=6){
for(i=C+1;i<8;i++)//you
{
if(a[R][i]==0)
{
flag=0;
break;
}
if(a[R][i]==N&& a[R][i-1]==0)
{
flag=0;
break;
}
if(a[R][i]==N&& a[R][i-1]!=N)
break;
if(i==7&& a[R][i]!=N)
{
flag=0;
break;
}
}
}
else
flag=0;
}
if(flag==0)
{
flag=1;
if(R>=1){
for(i=R-1;i>=0;i--)//shang
{
if(a[i][C]==0)
{
flag=0;
break;
}
if(a[i][C]==N&& a[i+1][C]==0 )
{
flag=0;
break;
}
if(a[i][C]==N&& a[i+1][C]!=N)
break;
if(i==0&& a[i][C]!=N)
{
flag=0;
break;
}
}
}
else
flag=0;
}
if(flag==0)
{
flag=1;
if(R<=6){
for(i=R+1;i<8;i++)//xia
{
if(a[i][C]==0)
{
flag=0;
break;
}
if(a[i][C]==N&& a[i-1][C]==0)
{
flag=0;
break;
}
if(a[i][C]==N&& a[i-1][C]!=N)
break;
if(i==7&& a[i][C]!=N)
{
flag=0;
break;
}
}
}
else
flag=0;
}
if(flag==0)
{
flag=1;
if(R>=1&& C<=6){
for(i=R-1;i>=0;i--)//youshang
{
if(a[i][C+R-i]==0&& C+R-i<8)
{
flag=0;
break;
}
if(a[i][C+R-i]==N&& a[i+1][C+R-i-1]==0 && C+R-i<8)
{
flag=0;
break;
}
if(a[i][C+R-i]==N&& a[i+1][C+R-i-1]!=N && C+R-i<8)
break;
}
}
else
flag=0;
}
if(flag==0)
{
flag=1;
if(R<=6&& C>=1){
for(i=R+1;i<8;i++)//zuoxia
{
if(a[i][C+R-i]==0&& C+R-i>=0)
{
flag=0;
break;
}
if(a[i][C+R-i]==N&& a[i-1][C+R-i+1]==0 && C+R-i>=0)
{
flag=0;
break;
}
if(a[i][C+R-i]==N&& a[i-1][C+R-i+1]!=N && C+R-i>=0)
break;
}
}
else
flag=0;
}
if(flag==0)
{
flag=1;
if(R>=1&& C>=1)
{
for(i=R-1;i>=0;i--)//zuoshang
{
if(a[i][C+i-R]==0&& C+i-R>=0)
{
flag=0;
break;
}
if(a[i][C+i-R]==N&& a[i+1][C+i-R+1]==0 && C+i-R>=0)
{
flag=0;
break;
}
if(a[i][C+i-R]==N&& a[i+1][C+i-R+1]!=N && C+i-R>=0)
break;
}
}
else
flag=0;
}
if(flag==0)
{
flag=1;
if(R<=6&& C<=6)
{
for(i=R+1;i<8;i++)//youxia
{
if(a[i][C+i-R]==0&& C+i-R<8)
{
flag=0;
break;
}
if(a[i][C+i-R]==N&& a[i-1][C+i-R-1]==0 && C+i-R<8)
{
flag=0;
break;
}
if(a[i][C+i-R]==N&& a[i-1][C+i-R-1]!=N && C+i-R<8)
break;
}
}
else
flag=0;
}
}
if(flag==1)
printf("Yes\n");
else
printf("No\n");
return0;
}
void init()
{
inti,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
scanf("%d",&a[i][j]);
}
}
scanf("%d%d%d",&R,&C,&N);
}
- 黑白棋(落子)绞尽脑汁 与老师模式强烈不兼容的思路(不推荐)
- 黑白棋(落子)
- 黑白棋的落子
- C++——黑白棋(落子)
- 黑白棋求使新状态己方子最多的落子位置
- 黑白棋(game)
- 枚举(黑白棋)
- 黑白棋(博弈论)
- 黑白棋的设计(三)
- 不兼容模式的协调--适配器模式(Adapter)
- 黑与不黑的区别
- java-----五子棋小游戏(二)-----黑白棋落子制作
- 黑白棋状态改变 较浅显的思路
- 基于TCP的网络游戏黑白棋系列(二):数据传输
- 我写的一个黑白棋脚本(socket协议)
- 慕课网五子连珠代码(增加黑白棋顺序的判断)
- 黑白棋(aphabeta剪枝算法的应用)带界面
- Fragment强烈不推荐使用自定义带参的构造函数
- editor does not contain a main type的解决方案
- 28. Queue
- 除了发外链seo人还能干什么
- 金蝶K3即时库存成本计算逻辑是什么?
- 树形dp
- 黑白棋(落子)绞尽脑汁 与老师模式强烈不兼容的思路(不推荐)
- gw
- 【cmd】IF ELSE 复制(copy)文件问题
- 有哪些好的刷题网站?2017年最受欢迎的编程挑战网站
- 快播王欣即将出狱 还有机会吗?
- 趣图:我是不是被录取了?
- yii曾删改查(不使用models)
- SpringIoC
- css浮动通俗解释