博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(hdu)5546 Ancient Go
阅读量:5349 次
发布时间:2019-06-15

本文共 3474 字,大约阅读时间需要 11 分钟。

Problem DescriptionYu 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 are 9×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. InputThe first line of the input gives the number of test cases, T(1≤T≤100). T test cases follow. Test cases are separated by an empty line. Each test case consist of 9 lines represent the game board. Each line consists of 9 characters. Each character represents a cell on the game board. ′.′ 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. OutputFor each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is 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. Sample Input2.......xo....................x.......xox....x.o.o...xo..o...........xxxo....xooo.......ox........o....o.......o.o.......o.....................o....x.............o Sample OutputCase #1: Can kill in one move!!!Case #2: Can not kill in one move!!!HintIn the first test case, Yu Zhou has 4 different ways to kill Su Lu's component.In the second test case, there is no way to kill Su Lu's component.

题意 在.出放一个黑棋X能包围白棋o,只能放一个黑棋

方法 搜索白棋四周有几个空白点如果小于等于1就可以

#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define N 200#define met(a,b) memset(a,b,sizeof(a));vector
>Q;char str[N][N];int dis[4][2]= { { 0,1},{ 1,0},{-1,0},{ 0,-1}};int vis[N][N];int pan(int x,int y){ return (x>=0 && x<9 && y>=0 && y<9);}int dfs(int x,int y) { vis[x][y]=1;int f=0; for(int i=0; i<4; i++) { int xx = x+dis[i][0]; int yy = y+dis[i][1]; if(vis[xx][yy] || !pan(xx,yy))///搜过的和坐垫不符合的跳过 continue; if(str[xx][yy]=='.')///有一个累加 { f++; vis[xx][yy]=1; } if(str[xx][yy]=='o')///四周白棋的四周的空白点个数 f+=dfs(xx,yy); } return f;}int sove(){ for(int i=0; i<9; i++) { for(int j=0; j<9; j++) { if(str[i][j]=='o') ///找到一个白棋搜索 { met(vis,0); int ans=dfs(i,j); if(ans<=1) return 1; } } } return 0;}int main(){ int t,con=1; scanf("%d",&t); while(t--) { for(int i=0; i<9; i++) scanf("%s",str[i]); int ans=sove(); if(ans) printf("Case #%d: Can kill in one move!!!\n",con++); else printf("Case #%d: Can not kill in one move!!!\n",con++); } return 0;}

 

转载于:https://www.cnblogs.com/jun939026567/p/5775340.html

你可能感兴趣的文章
Context.startActivity出现AndroidRuntimeException
查看>>
Intellij idea创建javaWeb以及Servlet简单实现
查看>>
代理网站
查看>>
Open multiple excel files in WebBrowser, only the last one gets activated
查看>>
FFmpeg进行视频帧提取&音频重采样-Process.waitFor()引发的阻塞超时
查看>>
最近邻与K近邻算法思想
查看>>
【VS开发】ATL辅助COM组件开发
查看>>
FlatBuffers In Android
查看>>
《演说之禅》I &amp; II 读书笔记
查看>>
thinkphp3.2接入支付宝支付接口(PC端)
查看>>
response和request
查看>>
【转】在Eclipse中安装和使用TFS插件
查看>>
回到顶部浮窗设计
查看>>
C#中Monitor和Lock以及区别
查看>>
【NOIP2017】奶酪
查看>>
$ 一步一步学Matlab(3)——Matlab中的数据类型
查看>>
5.6.3.7 localeCompare() 方法
查看>>
Linux下好用的简单实用命令
查看>>
常用web字体的使用指南
查看>>
描绘应用程序级的信息
查看>>