HDU_3683

这个题目由于情况不多,所以可以直接枚举,只不过枚举的时候需要注意一些细节。

枚举顺序如下:

①判断我们1步是否能赢。

②判断我们2步是否会输。实际上如果第2步会输,那么就相当于在当前棋盘状态下,对方至少有2个地方可以在落子后连5。

③判断我们3步是否会赢。在这里需要讨论一下,如果轮到③就说明我们在②的时候得到了两种情况,对方有1个地方可以在落子后连5,或者没有这样的地方。如果有1个地方可以落子连5,那么这一步我们必须走这个位置,如果没有这样的位置,我们这步就可以随意落子。枚举我们的落子位置之后再判断一下对方2步是否会输即可(相当于又进行了一次②,只不过这时的对象由我们变成了对方)。

#include<stdio.h>#include<string.h>int a[20][20],nx,ny;char b[][10]={"white","black"};int judge(now){int i,j;for(i=0;i<15;i++)for(j=0;j<15;j++)        {if(i<11&&j<11)if(a[i][j]==now&&a[i+1][j+1]==now&&a[i+2][j+2]==now&&a[i+3][j+3]==now&&a[i+4][j+4]==now)return 1;if(i<11)if(a[i][j]==now&&a[i+1][j]==now&&a[i+2][j]==now&&a[i+3][j]==now&&a[i+4][j]==now)return 1;if(j<11)if(a[i][j]==now&&a[i][j+1]==now&&a[i][j+2]==now&&a[i][j+3]==now&&a[i][j+4]==now)return 1;if(i>3&&j<11)if(a[i][j]==now&&a[i-1][j+1]==now&&a[i-2][j+2]==now&&a[i-3][j+3]==now&&a[i-4][j+4]==now)return 1;        }return 0;}int judge1(int now){int i,j,num=0,ok;for(i=0;i<15;i++)for(j=0;j<15;j++)if(a[i][j]<0)            {                a[i][j]=now;                ok=judge(now);                a[i][j]=-1;if(ok)                {                    nx=i;                    ny=j;return 1;                }            }return 0;}int judge2(int now){int i,j,num=0,ok;for(i=0;i<15;i++)for(j=0;j<15;j++)if(a[i][j]<0)            {                a[i][j]=!now;                ok=judge(!now);                a[i][j]=-1;if(ok)                {                    num++;                    nx=i;                    ny=j;if(num==2)return num;                }            }return num;}int judge3(int now){int i,j,ok;if(judge2(now)==1)    {        i=nx;        j=ny;        a[i][j]=now;if(judge2(!now)==2)        {            nx=i;            ny=j;return 1;        }elsereturn 0;    }for(i=0;i<15;i++)for(j=0;j<15;j++)if(a[i][j]<0)            {                a[i][j]=now;                ok=judge2(!now);                a[i][j]=-1;if(ok==2)                {                    nx=i;                    ny=j;return 1;                }            }    return 0;}int main(){int i,j,k,n,x,y,now;while(1)    {        scanf("%d",&n);if(n==0)break;        memset(a,-1,sizeof(a));        now=1;for(i=0;i<n;i++)        {            scanf("%d%d%d",&x,&y,&k);if(k)                now--;else                now++;            a[x][y]=k;        }if(now!=0&&now!=1)        {            printf("Invalid.\n");continue;        }if(n<=5)        {            printf("Cannot win in 3 moves.\n");continue;        }if(judge1(now))            printf("Place %s at (%d,%d) to win in 1 move.\n",b[now],nx,ny);else if(judge2(now)==2)            printf("Lose in 2 moves.\n");else if(judge3(now))            printf("Place %s at (%d,%d) to win in 3 moves.\n",b[now],nx,ny);else            printf("Cannot win in 3 moves.\n");    }return 0;    }

HDU 3683 Gomoku相关推荐

  1. [2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421

    文章目录 Priest John's Busiest Day code Peaceful Commission code Let's go home code Bomb Game code Elimi ...

  2. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  3. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  4. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  5. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  6. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  7. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  8. hdu 1272 小希的迷宫

    Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...

  9. HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋   题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...

最新文章

  1. 车辆行人检测数据集_开源 | 相机和激光雷达融合的行人车辆检测跟踪
  2. 深入python3 (Dive Into Python 3) 在线阅读与下载
  3. python画出心形图-python画出心形图
  4. JUST技术:空间连接运算与空间索引
  5. 2M线路保护实现与应用
  6. centos7 cuda测试_CentOS 7 安装 NVIDIA 显卡驱动以及CUDA驱动(自测可用)
  7. vue 路由懒加载,组件异步加载
  8. 图像的平滑与锐化代码matlab_【图像处理】轻松搞懂图像锐化
  9. 素拓活动策划书的撰写范文
  10. Linux Shell编程笔记8 进程
  11. php ip重复注册,php中表单的重复提交怎么通过记录IP来防止
  12. postfix+web页面+身份验证
  13. Nuget如何管理本地的包
  14. mysql5.6二进制包_MySQL 5.6版本二进制包多实例安装
  15. 英文java简历模板下载_java英文简历模板
  16. 微信订餐商城,微店系统.互联网第二个春天!
  17. 《仿人机器人原理与实战》一1.2 反射弧与仿人机器人设计
  18. SpringBoot 整合 Editormd(完整版)
  19. 定时任务:数据表设计与实现方案
  20. JSP空间上当受骗篇

热门文章

  1. Excel 中使用数据透视表 Pivot Table
  2. 一个自定义类型的运算符重载的例子
  3. 算法 深度优先,广度优先
  4. python网络编程——实现简单聊天
  5. CDH-5.7.1离线安装
  6. install xgboost package in python (Anaconda)
  7. Advice for Students--开始学术研究
  8. Delphi编译指令说明
  9. 点评----和时代专线
  10. java中的神奇this