天棋哥哥大战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击败李世石已经过去数月了,心中的震撼至今犹在,全刊报道此项比赛的<围棋天地>杂志我已经看了不下十遍.总也想说点自己的意见,却也不知道从哪里说起,更不知道想表达些什么. 作 ...
随机推荐
- ios日期时间
//1.获取当前时间 -(NSString*)getCurrentTime { NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; ...
- ASP.NET中application对象的用法(面试题)
ASP.NET中application对象的用法 本文导读:Application对象是HttpApplicationState类的一个实例,Application状态是整个应用程序全局的.Appli ...
- 嵌套json
今天一个客户问怎样把表中相同键值对应的文本按照一定顺序拼接起来.如果使用SQL实现将非常麻烦,并且效率低下.GP4.1以后提供了一个函数array_agg可以方便快捷,高效的实现该功能 比如原始查询是 ...
- drawableLayout的使用(转载讲的比较清晰的文章)
创建drawbler的布局文件 初始化drawbler的列表 响应drawable列表点击事件 现在侧滑菜单使用很多,大都是通过SlidingMenu实现.现在也可以通过DrawerLayout 创建 ...
- C# 网上收集的一些所谓的开源项目
C#开源 商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7- ...
- git(创建,提交,回退)
创建版本库 2334次阅读 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以 ...
- echo json数据给ajax后, 需要加上exit,防止往下执行,带上其他数据,到时ajax失败
01返回json数据给ajax后需要加上exit.返回json数据前不能有其他输出 function apply(){ if(IS_POST){$info['status'] = 1; echo js ...
- LeetCode OJ 99. Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- windows指令
& 无条件执行&符号后面的命令: && 当&&前面的命令成功执行时,执行&&后面的命令,否则不执行: || ...
- Inno Setup入门(十七)——Inno Setup类参考(3)
分类: Install Setup 2013-02-02 11:28 433人阅读 评论(0) 收藏 举报 标签 标签(Label)是用来显示文本的主要组件之一,也是窗口应用程序中最常用的组件之一,通 ...