天棋哥哥大战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. Cross Product

    Cross Product These are two vectors: They can be multiplied using the "Cross Product" (als ...

  2. javacript参数传递表单验证

    <!doctype html> <html> <head> <meta charset="utf-8"> <style typ ...

  3. Ubuntu11.10 E: Unable to locate package ubuntu-restricted-extras

    最近在ubuntu11.10下安装支持多媒体播放的插件时遇到一些问题,在此小记一下. 首先是ubuntu11.10的安装,基本上是一键安装,在此不细说. 1.此版本和以前使用的ubuntu版本风格不太 ...

  4. Objective-C 2.0属性(Property)介绍

    通常在声明一些成员变量时会看到如下声明方式: @property (参数1,参数2) 类型 名字: 这里我们主要分析在括号中放入的参数,主要有以下三种: setter/getter方法(assign/ ...

  5. csdn如何转载别人的文章

    1.找到要转载的文章,用chrome浏览器打开,右键选择审查元素 2.在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中 ...

  6. HDU 5805 NanoApe Loves Sequence

    处理出每个位置左边的最大值和右边的最大值.然后就可以o(1)计算去掉某位置的最大值了. #pragma comment(linker, "/STACK:1024000000,10240000 ...

  7. java中的静态代码块等执行顺序

    http://www.cnblogs.com/naruto469/p/3608459.html public class Print { 2 3 public Print(String s){ 4 S ...

  8. Java中的String[] args

    在每个java程序中都有一个方法,public static void main(String[] args)方法,这个参数看了好久没看懂,但是细细看来,还是挺简单的,所有的方法的参数都是一个道理,而 ...

  9. servlet第1讲初识

  10. 页面跳转后样式丢失js失效

    2 页面跳转后样式丢失js失效 问题描述: 用ajax跳转的时候,从a.html跳转到b.html后,b.html的css以及js都失效了. 解决办法: 将当前页面需要用到的css以及js放在< ...