天棋哥哥大战AlphaGo
天棋哥哥大战AlphaGo
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 20 Solved: 9
[Submit][Status][Web Board]
Description
3月15日,人机围棋大战巅峰对决在韩国首尔落下帷幕。五番棋的最后一局中,韩国著名棋手李世乭尽管与人工智能“AlphaGo”缠斗至官子阶段,但在双双进入读秒后最终还是投子认输,以总比分1∶4结束了这场举世瞩目的人机大战。
100年后的某一天,天棋哥哥为了给李世乭报仇,挽回人类尊严,代表人类向AlphaGo发起了挑战。
100年后的AlphaGo比现在强了几百倍,谷歌公司允许天棋哥哥携带一个程序与AlphaGo对战。
为了能战胜AlphaGo,现在请你帮助天棋哥哥写一个程序来判断他这一步落子后,最多能提几子。
提子规则如下:
中国围棋棋盘可以看做一个19*19的网格,每一个网格都可以下棋子。
【棋子的气】
一个棋子在棋盘上,与它直线紧邻的空点是这个棋子的“气”。
直线紧邻的点上如果有同色棋子存在,这些棋子就相互连接成一个不可分割的整体。
直线紧邻的点上如果有异色棋子存在,此处的气便不存在。棋子如失去所有的气,就不能在棋盘上存在。
【提子】
把无气之子清理出棋盘的手段叫“提子”。提子有二种:
1、下子后,对方棋子无气,应立即提取对方无气之子。
2、下子后,双方棋子都呈无气状态,应立即提取对方无气之子。
现在,给出一个局面,轮到天棋哥哥下,请计算他落子后最多能提多少子。
Input
每组测试数据19行,每行为长度19的字符串
'.'代表空格,'X'代表天棋哥哥,'O’代表AlphaGo
Output
输出一个数字,代表最多能提几子。
Sample Input
...................
....XX.............
...XOOX............
.....X.............
....X..............
.....O.............
......O............
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
...................
....XX.............
...XO.X............
.....X.............
....X..............
.....O.............
......O............
...................
...................
...................
..................X
.................XO
..................O
..................X
...................
...................
...................
...................
...................
Sample Output
2
2
#include <iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<deque>
using namespace std; int ans,i,j,num;
char mp[][];
int vis[][];
int dr[][]={{,},{,},{-,},{,-} }; struct node
{
int x,y;
node(int a,int b){x=a; y=b;}
};
deque<node> sx,so; bool check(int x,int y)
{
if (x>= && x< && y>= && y<) return ;
return ;
} int bfs(int x,int y)
{
vis[x][y]=;
int num=;
int flag=;
queue<node> Q;
Q.push(node(x,y));
while(!Q.empty())
{
node p=Q.front();
Q.pop();
for(int i=;i<;i++)
{
int xx=p.x+dr[i][];
int yy=p.y+dr[i][];
if (!check(xx,yy)) continue;
if (mp[xx][yy]=='.') flag=;
if (mp[xx][yy]=='O' && !vis[xx][yy])
{
num++;
vis[xx][yy]=;
Q.push(node(xx,yy));
}
}
}
if (!flag) return num;
else return ;
} void findpos(int x,int y)
{
vis[x][y]=;
queue<node> Q;
Q.push(node(x,y));
while(!Q.empty())
{
node p=Q.front();
Q.pop();
for(int i=;i<;i++)
{
int xx=p.x+dr[i][];
int yy=p.y+dr[i][];
if (!check(xx,yy)) continue;
if (mp[xx][yy]=='O' && !vis[xx][yy]) Q.push(node(xx,yy));
if (mp[xx][yy]=='.' && !vis[xx][yy]) sx.push_back(node(xx,yy));
vis[xx][yy]=;
}
}
return;
} int main()
{
while(~scanf("%s",&mp[]))
{
for(i=;i<;i++)
scanf("%s",&mp[i]); memset(vis,,sizeof(vis));
sx.clear();
so.clear();
for(i=;i<;i++)
for(j=;j<;j++)
if (mp[i][j]=='O')
{
so.push_back(node(i,j));
if (!vis[i][j]) findpos(i,j);
} ans=;
for(i=;i<sx.size();i++)
{
mp[sx[i].x][sx[i].y]='X';
num=;
memset(vis,,sizeof(vis));
for(j=;j<so.size();j++)
if(!vis[so[j].x][so[j].y])
num+=bfs(so[j].x,so[j].y);
ans=max(ans,num);
mp[sx[i].x][sx[i].y]='.';
} printf("%d\n",ans);
} return ;
}
/*
...................
....XXX............
...XOOOX...........
....XX.OX..........
....XOO............
.....XX............
......O............
...................
...................
..................O
.................OX
................OXO
.................XO
..................O
..................X
...................
...................
...................
...................
*/
天棋哥哥大战AlphaGo的更多相关文章
- ZUFEOJ 2395 天棋哥哥大战AlphGo
Description3月15日,人机围棋大战巅峰对决在韩国首尔落下帷幕.五番棋的最后一局中,韩国著名棋手李世乭尽管与人工智能“AlphaGo”缠斗至官子阶段,但在双双进入读秒后最终还是投子认输,以总 ...
- 深度强化学习(DRL)专栏(一)
目录: 1. 引言 专栏知识结构 从AlphaGo看深度强化学习 2. 强化学习基础知识 强化学习问题 马尔科夫决策过程 最优价值函数和贝尔曼方程 3. 有模型的强化学习方法 价值迭代 策略迭代 4. ...
- 随便谈谈alphago与人机大战
3月16日历时8天的人机大战终于落下帷幕,alphago以4:1的比分击败了当年如日中天的李世石.这个结果让我这个围棋爱好者+计算机爱好者百感交集…… ——一个时代落幕了,一个新的时代开启了. 这次人 ...
- 人机大战中AlphaGo及其执子人黄士杰
2016年3月9日注定要写入围棋界的历史.IT界的历史以及科学界的历史.当天,韩国著名围棋棋手李世石VS谷歌AlphaGo的人机大战赛在韩国首尔举行.对弈的一方为拥有1200多个处理器的谷歌人工智能系 ...
- 人机大战之AlphaGo的硬件配置和算法研究
AlphaGo的硬件配置 最近AlphaGo与李世石的比赛如火如荼,关于第四盘李世石神之一手不在我们的讨论范围之内.我们重点讨论下AlphaGo的硬件配置: AlphaGo有多个版本,其中最强的是分布 ...
- 世界围棋人机大战、顶峰对决第一盘:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序
Match 1 - Google DeepMind Challenge Match: Lee Sedol vs AlphaGo 很多网站对世界围棋大战进行了现场直播,比如YouTube.新浪.乐视.腾 ...
- 世界围棋人机大战、顶峰对决第二战:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,AlphaGo再次胜出!
感觉在哔哩哔哩(bilibili)上看比赛直播比较好,一直可以看到比赛的直播画面,还能听到英文解说和中文主持人的解说.YouTube上是不错,但是一方面爬梯子比较卡,另一方面只能听到英文解说. 韩国著 ...
- 我与小娜(36):人机大战第五局,AlphaGo必胜!
我与小娜(36):人机大战第五局,AlphaGo必胜! 小娜知道,细致阅读论文"Mastering the game of Go with deep neural network ...
- 也谈谈AlphaGo
距离AlphaGo击败李世石已经过去数月了,心中的震撼至今犹在,全刊报道此项比赛的<围棋天地>杂志我已经看了不下十遍.总也想说点自己的意见,却也不知道从哪里说起,更不知道想表达些什么. 作 ...
随机推荐
- PHP中使用CURL(六)
curl常用的几个例子 1.抓取无访问控制文件 <?php $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://local ...
- [ An Ac a Day ^_^ ] UVALive 7270 Osu! Master
2015icpc北京区域赛的签到题 还是很签到的 一次就过了 题意呢 就是统计B C后最长上升序列还有S的个数 当然B C要被S分割开…… /* *************************** ...
- FZU 1893 内存管理 模拟
比赛的时候队友要做这道题…… 他没做出来自己也被误导了…… 也算是个教训 自己还是要有自己的思路…… 又是模拟题…… 网上都是用vector做的 我最近才会stl 怎么会用那么高大上的的东西…… 强力 ...
- Ubuntu14.04下手动建立快捷方式
先在桌面创建一个文件:文件内容如下 [Desktop Entry]Encoding=UTF-8Name=eclipseComment=eclipse ideExec=/home/mars/eclips ...
- 如何让图片在div里面剧中显示
你可能有很多种方式,但是这种方式我觉得更加简单,供大家参考. 用一个 display:inline-block 的helper容器高度为height: 100% 并且vertical-align: m ...
- ClassLoader类加载解惑
1.通过类加载器获取路径: String path = Thread.currentThread().getContextClassLoader().getResource("." ...
- zendstudio 安装 手册
安装 http://jingyan.baidu.com/article/b907e627b14fbb46e6891c65.html 选择baidu官方32bit安装 补丁破解网址 http://dwt ...
- C C++ 中结构体与类
先来说说C和C++中结构体的不同 a) C语言中的结构体不能为空,否则会报错 1>d:\myproject\visual studio 2013\projects\myc++\main.c(71 ...
- centos 安装ftp服务器
CentOS下搭建FTP服务器简单记录. 1.安装vsftpd yum install vsftpd 2.编辑iptablesvi /etc/sysconfig/iptables -A INPUT - ...
- JPA 系列教程15-继承-一个表-SINGLE_TABLE
继承映射策略 一个类继承结构一个表的策略,最终只生成一个表,这是继承映射的默认策略. 举例 如果实体类Teacher继承实体类Person,实体类Student也继承自实体Person,那么只会映射成 ...