给出五子棋残局,推断三步内能否分出胜负,玩家为当前该走旗子的颜色,下一步为白棋或黑棋不定。

依照顺序推断就可以:

1:推断棋盘是否合法,并确定玩家颜色

2:推断当前玩家颜色是否有一个必胜点,有玩家则在第一步胜

3:推断还有一方在当前是否有两个必胜点,若有,则玩家在第二步失败

4:BFS出玩家是否存在此方案:随意放置一个位置的前提下,还有一方没有必胜点,且玩家有两个必胜点,则玩家在第三步胜

5:否则3步内无法分出胜负

#include "stdio.h"
#include "string.h"int dir[4][2]={{-1,0},{-1,1},{0,1},{1,1}};int map[21][21];
int ans_x,ans_y;int ok1(int key)
{int i,j,x,y,k,sum;for (i=0;i<15;i++)for (j=0;j<15;j++)if (map[i][j]==-1){for (k=0;k<4;k++){x=i; y=j; sum=1;while (1){x+=dir[k][0];y+=dir[k][1];if (x<0 || x>=15 || y<0 || y>=15) break;if (map[x][y]!=key) break;sum++;}x=i;y=j;while (1){x-=dir[k][0];y-=dir[k][1];if (x<0 || x>=15 || y<0 || y>=15) break;if (map[x][y]!=key) break;sum++;}if (sum>=5) { ans_x=i; ans_y=j; return 1;}}}return -1;
}int ok2(int key)
{int i,j,k,x,y,sum,ok;ok=0;for (i=0;i<=14;i++)for (j=0;j<=14;j++)if (map[i][j]==-1){for (k=0;k<4;k++){sum=1;x=i; y=j;while (1){x+=dir[k][0];y+=dir[k][1];if (x<0 || x>=15 || y<0 || y>=15) break;if (map[x][y]!=key) break;sum++;}x=i; y=j;while (1){x-=dir[k][0];y-=dir[k][1];if (x<0 || x>=15 || y<0 || y>=15) break;if (map[x][y]!=key) break;sum++;}if (sum>=5) {ok++;break;}}if (ok==2) return 1;}return -1;
}int bfs(int key)
{int i,j;for (i=0;i<15;i++)for (j=0;j<15;j++)if (map[i][j]==-1){map[i][j]=key;if (ok1(1-key)==-1 && ok2(key)==1){ans_x=i; ans_y=j;return 1;}map[i][j]=-1;}return -1;
}int main()
{int n,i,a,b,c,blk,wt,first,ans;while (scanf("%d",&n)!=EOF){if (n==0) break;blk=wt=0;memset(map,-1,sizeof(map));for (i=1;i<=n;i++){scanf("%d%d%d",&a,&b,&c);map[a][b]=c;if (c==1) blk++; else wt++;}if (blk==wt) first=1;elseif (blk==wt+1) first=0;else{printf("Invalid.\n");continue;}ans=ok1(first); // 第一步存在必胜点if (ans==1){printf("Place ");if (first==1) printf("black "); else printf("white ");printf("at (%d,%d) to win in 1 move.\n",ans_x,ans_y);continue;}ans=ok2(1-first); // 还有一方存在两个必胜点if (ans==1){printf("Lose in 2 moves.\n");continue;}ans=bfs(first); // 搜索是否存在第三步定胜负if (ans==1){printf("Place ");if (first==1) printf("black "); else printf("white ");printf("at (%d,%d) to win in 3 moves.\n",ans_x,ans_y);continue;}elseprintf("Cannot win in 3 moves.\n");}return 0;}

HDU 3683 模拟amp;搜索相关推荐

  1. 如何使用Entity Framework在Always Encrypted列上模拟通配符搜索

    介绍 (Introduction) The title of this post should have been "How to implement wildcard search fun ...

  2. 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    转自:https://www.cnblogs.com/pinard/p/10470571.html 1. 基于模拟的搜索概述 什么是基于模拟的搜索呢?当然主要是两个点:一个是模拟,一个是搜索.模拟我们 ...

  3. 强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...

  4. JS模拟百度搜索框和选项卡

    练习1 实现搜索框内,输入相关数字,在下方显示相关内容,模拟百度搜索,详细代码如下: <!DOCTYPE html> <html lang="en">< ...

  5. JS模拟京东搜索框案例 模拟京东快递单号查询案例

    模拟京东搜索框案例 <!DOCTYPE html> <html lang="en"><head><meta charset="U ...

  6. python模拟百度搜索点击链接_用 Python 获取百度搜索结果链接

    前言 近期有许多项目需要这个功能,由于Python实现起来比较简单就这么做了,代码贴下来觉得好点个赞吧~ 代码 # coding: utf-8 import os import time import ...

  7. 微信小程序—模拟豆瓣搜索电影(图文)

    微信小程序-模拟豆瓣搜索电影 先新建search目录和page 1.在search.wxml页面 给input添加bindinput事件 给input写一个value值,用来清空 给button绑定b ...

  8. 强化学习基础 | (18) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)

    原文地址 在基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基于模型的 ...

  9. java 模拟点击按钮_HttpUnit模拟按钮点击以及爬虫实现(模拟百度搜索)

    HttpUnit模拟按钮点击以及爬虫实现(模拟百度搜索) HttpUnit 本质上相当于一个后台的透明的浏览器引擎,使用java中的HttpUnit可以实现模拟点击按钮,抓取网页元素,实现动态爬虫,之 ...

  10. Hdu 4090 GemAnd Prince (搜索_2010年北京区域赛)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4090 题目大意:给定一个n*m,矩阵上每个点都有一个数字,数字范围是1到k,某个数字相同的连通块如果 ...

最新文章

  1. linux 杀毒软件 clamav安装使用
  2. centos7二进制安装php,Centos7下编译安装配置Nginx+PHP+MySql环境
  3. 少儿python编程培训-全国少儿人工智能Python编程兴趣班
  4. Linux下shell脚本之双色球摇号脚本
  5. EntityFramework Core查询数据基本本质
  6. 你最擅长哪种数学思维?
  7. 作者:​张群(1988-),女,博士,中国电子技术标准化研究院设备与数据研究室副主任。...
  8. Revit二次开发The symbol is not active
  9. Android native进程间通信实例-binder篇之——解决实际问题inputreader内建类清楚缓存...
  10. mysql中gbk编码汉字和英文_MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题...
  11. 力扣-897 递增顺序搜索树
  12. python可视化经纬度信息
  13. win10易升_win10上跑Ubuntu不用虚拟机不用双系统!
  14. 虚拟签到拍照打卡技巧,超实在的教程
  15. 微信小程序云端解决方案探索之路
  16. pip异常No module named ‘pip‘处理方法
  17. Flutter 入门笔记 三
  18. yolov3 批量处理图片获得检测框坐标
  19. iOS:crash崩溃日志分析
  20. 微信小程序+UDP+wifi8266+l293d扩展板+Arduino uno遥控小车

热门文章

  1. javaweb java代码写在哪里_写了那么多年 Java 代码,终于 debug 到 JVM 了
  2. 下面哪一个不是python语言的合法命名_下面哪一个不是Python语言的合法命名
  3. php 字符串合并,如何在PHP中将两个字符串组合在一起?
  4. 动态列之函数实现动态列
  5. 西安工程大学计算机是几本专业,2016年西安工程大学计算机科学与技术(卓越班)专业在陕西录取分数线...
  6. linux安装最新php版本下载地址,服务器配置-使用Linux编译安装PHP指定版本
  7. informix设置数据库默认插入时间_informix常用时间运算和操作方式
  8. python字符串的删除操作_学习快人一步|python中常见的27个字符串操作
  9. openfire:openfire单独编译指定插件的方法
  10. [禅悟人生]将所学转化成修行