G - Ancient Go
来源:互联网 发布:夏天手工坊淘宝网 编辑:程序博客网 时间:2024/06/08 19:54
G - Ancient Go
Yu Zhou likes to play Go
with Su Lu. From the historical research, we found that there are much difference on the rules between ancient go and modern go.
Here is the rules for ancient go they were playing:
- The game is played on a
8×8 cell board, the chess can be put on the intersection of the board lines, so there are9×9 different positions to put the chess. - Yu Zhou always takes the black and Su Lu the white. They put the chess onto the game board alternately.
- The chess of the same color makes connected components(connected by the board lines), for each of the components, if it's not connected with any of the empty cells,
this component dies and will be removed from the game board. - When one of the player makes his move, check the opponent's components first. After removing the dead opponent's components, check with the player's components and remove
the dead components.
One day, Yu Zhou was playing ancient go with Su Lu at home. It's Yu Zhou's move now. But they had to go for an emergency military action. Little Qiao looked at the game board and
would like to know whether Yu Zhou has a move to kill at least one of Su Lu's chess.
The first line of the input gives the number of test cases,
lines represent the game board. Each line consists of .
represents an empty cell. x
represents a
cell with black chess which owned by Yu Zhou. o
represents a cell with white chess which owned by Su Lu.
For each test case, output one line containing Case #x: y
, where Can kill in one move!!!
if Yu Zhou
has a move to kill at least one of Su Lu's components. Can not kill in one move!!!
otherwise.
2
…….xo
………
………
..x……
.xox….x
.o.o…xo
..o……
…..xxxo
….xooo.
……ox.
…….o.
…o…..
..o.o….
…o…..
………
…….o.
…x…..
……..o
Case #1: Can kill in one move!!!
Case #2: Can not kill in one move!!!
In the first test case, Yu Zhou has
In the second test case, there is no way to kill Su Lu's component.
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
int Map[10][10];
int vis[10][10];
char str[10][10];
int xi[]={0,0,-1,1};
int yj[]={1,-1,0,0};
int dfs1(int x,int y)
{
vis[x][y]=1;
if(x<0||y<0||x>8||y>8)
return 0;
for(int i=0;i<4;i++)
{
int xx=x+xi[i];
int yy=y+yj[i];
if(xx<0||yy<0||xx>8||yy>8||vis[xx][yy])
continue;
if(str[xx][yy]=='.')
return 1;
if(str[xx][yy]=='o')
if(dfs1(xx,yy))
return 1;
}
return 0;
}
int dfs(int x,int y)
{
if(str[x][y]!='.')
return 0;
str[x][y]='x';
for(int i=0;i<4;i++)
{
int xx=x+xi[i];
int yy=y+yj[i];
if(xx<0||yy<0||xx>8||yy>8)
continue;
if(str[xx][yy]=='o')
{
memset(vis,0,sizeof(vis));
if(dfs1(xx,yy)==0)
return 1;
}
}
str[x][y]='.';
return 0;
}
int main()
{
int t;
cin>>t;
for(int k=1;k<=t;k++)
{
int i,j;
int flag=0;
for(i=0;i<9;i++)
scanf("%s",str[i]);
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(str[i][j]=='x'||str[i][j]=='o')
continue;
if(dfs(i,j))
{
flag=1;
break;
}
}
if(flag)
break;
}
if(flag)
cout<<"Case #"<<k<<": Can kill in one move!!!\n";
else
cout<<"Case #"<<k<<": Can not kill in one move!!!\n";
}
return 0;
}
- G - Ancient Go
- 2015 南阳 CCPC G.Ancient Go
- 南阳CCPC G题 Ancient Go
- Ancient Go
- Ancient Go
- Ancient Go
- uestc 1221 Ancient Go
- UESTC 1221 Ancient Go
- Ancient Go【ccpc dfs】
- hdu 5546 Ancient Go
- 2015 CCPC Ancient Go
- dfs ancient go
- HDU 5546 Ancient Go
- HDU5546 Ancient Go DFS
- hdu 5546/Ancient Go
- Ancient Go HDU
- hdu 5546 Ancient Go
- HDU5546-Ancient Go
- Mqtt相关概念
- 监听返回按钮,点击两下才退出程序
- 如何用Spark解决一些经典MapReduce问题
- 基于数据驱动的web UI自动化测试
- matlab练习程序(倾斜校正,透视变换)
- G - Ancient Go
- 递归的内存超出问题
- 10.3Matlab 匿名函数、子函数
- sublime快捷键
- 学习计划安排 2016年底
- RecyclerView浅析
- 使用openssl生成RSA公钥和私钥对
- JavaScript form表单笔记
- Ubuntu 16.04设置Tab长度