G - Ancient Go
Time Limit: 1 Sec
Memory Limit: 256 MB
无
2
.......xo
.........
.........
..x......
.xox....x
.o.o...xo
..o......
.....xxxo
....xooo.
......ox.
.......o.
...o.....
..o.o....
...o.....
.........
.......o.
...x.....
........o
Sample Output
Case #1: Can kill in one move!!!
Case #2: Can not kill in one move!!!
题意
下围棋,让你下一粒子,然后问你能否至少围住一个o
题解:
数据范围才9*9,直接瞎暴力就行了
代码:
#include<stdio.h> #include<iostream> #include<math.h> #include<cstring> using namespace std; string s[10]; int vis[10][10]; int dx[4]={1,-1,0,0}; int dy[4]={0,0,1,-1}; int check2(int x,int y) { vis[x][y]=1; if(x<0||x>=9||y<0||y>=9)return 0; for(int i=0;i<4;i++) { int xx = x+dx[i]; int yy = y+dy[i]; if(xx<0||xx>=9||yy<0||yy>=9)continue; if(vis[xx][yy])continue; if(s[xx][yy]==‘.‘)return 1; if(s[xx][yy]==‘o‘&&check2(xx,yy)) return 1; } return 0; } int check(int x,int y) { if(s[x][y]!=‘.‘)return 0; s[x][y]=‘x‘; for(int i=0;i<4;i++) { int xx = x+dx[i]; int yy = y+dy[i]; if(xx<0||xx>=9||yy<0||yy>=9)continue; if(s[xx][yy]==‘o‘) { memset(vis,0,sizeof(vis)); if(!check2(xx,yy)) return 1; } } s[x][y]=‘.‘; return 0; } int main() { int t;scanf("%d",&t); for(int cas=1;cas<=t;cas++) { for(int i=0;i<9;i++) cin>>s[i]; int flag = 0; for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(s[i][j]==‘o‘||s[i][j]==‘x‘)continue; if(check(i,j)) { flag = 1; s[i][j]=‘.‘; break; } } } if(flag) printf("Case #%d: Can kill in one move!!!\n",cas); else printf("Case #%d: Can not kill in one move!!!\n",cas); } }
原文:http://www.cnblogs.com/qscqesze/p/4899353.html