天棋哥哥大战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的更多相关文章

  1. ZUFEOJ 2395 天棋哥哥大战AlphGo

    Description3月15日,人机围棋大战巅峰对决在韩国首尔落下帷幕.五番棋的最后一局中,韩国著名棋手李世乭尽管与人工智能“AlphaGo”缠斗至官子阶段,但在双双进入读秒后最终还是投子认输,以总 ...

  2. 深度强化学习(DRL)专栏(一)

    目录: 1. 引言 专栏知识结构 从AlphaGo看深度强化学习 2. 强化学习基础知识 强化学习问题 马尔科夫决策过程 最优价值函数和贝尔曼方程 3. 有模型的强化学习方法 价值迭代 策略迭代 4. ...

  3. 随便谈谈alphago与人机大战

    3月16日历时8天的人机大战终于落下帷幕,alphago以4:1的比分击败了当年如日中天的李世石.这个结果让我这个围棋爱好者+计算机爱好者百感交集…… ——一个时代落幕了,一个新的时代开启了. 这次人 ...

  4. 人机大战中AlphaGo及其执子人黄士杰

    2016年3月9日注定要写入围棋界的历史.IT界的历史以及科学界的历史.当天,韩国著名围棋棋手李世石VS谷歌AlphaGo的人机大战赛在韩国首尔举行.对弈的一方为拥有1200多个处理器的谷歌人工智能系 ...

  5. 人机大战之AlphaGo的硬件配置和算法研究

    AlphaGo的硬件配置 最近AlphaGo与李世石的比赛如火如荼,关于第四盘李世石神之一手不在我们的讨论范围之内.我们重点讨论下AlphaGo的硬件配置: AlphaGo有多个版本,其中最强的是分布 ...

  6. 世界围棋人机大战、顶峰对决第一盘:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序

    Match 1 - Google DeepMind Challenge Match: Lee Sedol vs AlphaGo 很多网站对世界围棋大战进行了现场直播,比如YouTube.新浪.乐视.腾 ...

  7. 世界围棋人机大战、顶峰对决第二战:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,AlphaGo再次胜出!

    感觉在哔哩哔哩(bilibili)上看比赛直播比较好,一直可以看到比赛的直播画面,还能听到英文解说和中文主持人的解说.YouTube上是不错,但是一方面爬梯子比较卡,另一方面只能听到英文解说. 韩国著 ...

  8. 我与小娜(36):人机大战第五局,AlphaGo必胜!

    我与小娜(36):人机大战第五局,AlphaGo必胜!       小娜知道,细致阅读论文"Mastering the game of Go with deep neural network ...

  9. 也谈谈AlphaGo

    距离AlphaGo击败李世石已经过去数月了,心中的震撼至今犹在,全刊报道此项比赛的<围棋天地>杂志我已经看了不下十遍.总也想说点自己的意见,却也不知道从哪里说起,更不知道想表达些什么. 作 ...

随机推荐

  1. Java ZIP打包

    File zipFile = IOUtil.createTempFile("zip"); ZipOutputStream zipout = new ZipOutputStream( ...

  2. 判断手机电脑微信 js

    if ((navigator.userAgent.match(/(MicroMessenger)/i))) { //微信浏览器 //location.href=""; } else ...

  3. java读写串口

    http://blog.csdn.net/xxyy888/article/details/8946046

  4. B - 瑶瑶带你玩激光坦克

    B - 瑶瑶带你玩激光坦克 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 256000/128000KB (Java/Others) S ...

  5. 1.建立exception包,编写TestException.java程序,主方法中有以下代码,确定其中可能出现的异常,进行捕获处理。

    package d0923; public class TestException { public static void main(String[] args) { for(int i=0;i&l ...

  6. localStorage请使用getItem 和setITem

    最近看别人的代码,发现他们在从localStorage里面的时候喜欢用dot来操作,而不是get setItem,记得以前说过这个事.下面再说一次吧. 用dot方式来操作(   每次以'hello'= ...

  7. php练习1

    <?php$conn=mysqli_init();if(!conn){ echo "mysqli_init error"; exit(0);}$ret=mysqli_real ...

  8. Linux关机命令详解

    在linux下一些常用的关机/重启命令有shutdown.halt.reboot.及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的. Linux centos重启命令: 1. ...

  9. VBS基础篇 - 对象(6) - Folder对象

    VBS基础篇 - 对象(6) - Folder对象   描述:提供对文件所有属性的访问,从FSO对象的GetFile方法获得 使用Folder对象 要用Folder对象模型来编程必须先用FSO对象的G ...

  10. 自定义NSOperation

    一直在思考,每次异步请求都会创建一个新线程,如果我同时发100个异步请求,这样会导致我的内存爆满,应用程序奔溃,因为iOS对开线程有着约束,不能开很多个线程,这就要求我们必须对异步请求进行控制,我一直 ...