HDU 3683 模拟amp;搜索
给出五子棋残局,推断三步内能否分出胜负,玩家为当前该走旗子的颜色,下一步为白棋或黑棋不定。
依照顺序推断就可以:
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;搜索相关推荐
- 如何使用Entity Framework在Always Encrypted列上模拟通配符搜索
介绍 (Introduction) The title of this post should have been "How to implement wildcard search fun ...
- 系统学习深度学习(四十)--基于模拟的搜索与蒙特卡罗树搜索(MCTS)
转自:https://www.cnblogs.com/pinard/p/10470571.html 1. 基于模拟的搜索概述 什么是基于模拟的搜索呢?当然主要是两个点:一个是模拟,一个是搜索.模拟我们 ...
- 强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)
在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基 ...
- JS模拟百度搜索框和选项卡
练习1 实现搜索框内,输入相关数字,在下方显示相关内容,模拟百度搜索,详细代码如下: <!DOCTYPE html> <html lang="en">< ...
- JS模拟京东搜索框案例 模拟京东快递单号查询案例
模拟京东搜索框案例 <!DOCTYPE html> <html lang="en"><head><meta charset="U ...
- python模拟百度搜索点击链接_用 Python 获取百度搜索结果链接
前言 近期有许多项目需要这个功能,由于Python实现起来比较简单就这么做了,代码贴下来觉得好点个赞吧~ 代码 # coding: utf-8 import os import time import ...
- 微信小程序—模拟豆瓣搜索电影(图文)
微信小程序-模拟豆瓣搜索电影 先新建search目录和page 1.在search.wxml页面 给input添加bindinput事件 给input写一个value值,用来清空 给button绑定b ...
- 强化学习基础 | (18) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)
原文地址 在基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna.本文我们讨论另一种非常流行的集合基于模型与不基于模型的 ...
- java 模拟点击按钮_HttpUnit模拟按钮点击以及爬虫实现(模拟百度搜索)
HttpUnit模拟按钮点击以及爬虫实现(模拟百度搜索) HttpUnit 本质上相当于一个后台的透明的浏览器引擎,使用java中的HttpUnit可以实现模拟点击按钮,抓取网页元素,实现动态爬虫,之 ...
- Hdu 4090 GemAnd Prince (搜索_2010年北京区域赛)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4090 题目大意:给定一个n*m,矩阵上每个点都有一个数字,数字范围是1到k,某个数字相同的连通块如果 ...
最新文章
- linux 杀毒软件 clamav安装使用
- centos7二进制安装php,Centos7下编译安装配置Nginx+PHP+MySql环境
- 少儿python编程培训-全国少儿人工智能Python编程兴趣班
- Linux下shell脚本之双色球摇号脚本
- EntityFramework Core查询数据基本本质
- 你最擅长哪种数学思维?
- 作者:​张群(1988-),女,博士,中国电子技术标准化研究院设备与数据研究室副主任。...
- Revit二次开发The symbol is not active
- Android native进程间通信实例-binder篇之——解决实际问题inputreader内建类清楚缓存...
- mysql中gbk编码汉字和英文_MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题...
- 力扣-897 递增顺序搜索树
- python可视化经纬度信息
- win10易升_win10上跑Ubuntu不用虚拟机不用双系统!
- 虚拟签到拍照打卡技巧,超实在的教程
- 微信小程序云端解决方案探索之路
- pip异常No module named ‘pip‘处理方法
- Flutter 入门笔记 三
- yolov3 批量处理图片获得检测框坐标
- iOS:crash崩溃日志分析
- 微信小程序+UDP+wifi8266+l293d扩展板+Arduino uno遥控小车
热门文章
- javaweb java代码写在哪里_写了那么多年 Java 代码,终于 debug 到 JVM 了
- 下面哪一个不是python语言的合法命名_下面哪一个不是Python语言的合法命名
- php 字符串合并,如何在PHP中将两个字符串组合在一起?
- 动态列之函数实现动态列
- 西安工程大学计算机是几本专业,2016年西安工程大学计算机科学与技术(卓越班)专业在陕西录取分数线...
- linux安装最新php版本下载地址,服务器配置-使用Linux编译安装PHP指定版本
- informix设置数据库默认插入时间_informix常用时间运算和操作方式
- python字符串的删除操作_学习快人一步|python中常见的27个字符串操作
- openfire:openfire单独编译指定插件的方法
- [禅悟人生]将所学转化成修行