题意,只要在空白的地方加一个x能围到一个o 就算赢。
就一个简单的dfs,我就不明白那错了, ,然后莫名其妙的就过了。
。。。卧槽。
真的好气凹。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define ll long long
using namespace std;
const int maxn = 100100;
const int inf = 0xfffffff;
char a[20][20];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
struct node{
int x,y;
};
node st,u,v;
int vis[20][20];
pair <int ,int>p;
map<pair<int ,int >,int>mm;
int bfs(int x,int y){
queue<node>que;
mm.clear();
while(!que.empty()) que.pop();
st.x=x;st.y=y;
que.push(st);
vis[x][y]=1;
int ret=0,flag=1;
while(!que.empty()){
u=que.front();
que.pop();
for(int i=0;i<4;++i){
v.x=u.x+dir[i][0];
v.y=u.y+dir[i][1];
if(v.x<1||v.y<1||v.x>9||v.y>9||vis[v.x][v.y]) continue;
if(a[v.x][v.y]=='o') {
que.push(v);vis[v.x][v.y]=1;
}
if(a[v.x][v.y]=='.') {
p.first=v.x,p.second=v.y;
if(!mm[p]) {
mm[p]=1;
if(ret==0) ret=1;
else flag=0;
}
}
}
}
return flag;
}
int main() {
int T,g,ca=1;
cin>>T;
while(T--){
g=0;memset(vis,0,sizeof(vis));
for(int i=1;i<=9;++i)
scanf("%s",a[i]+1);
for(int i=1;i<=9;++i){
for(int j=1;j<=9;++j){
if(a[i][j]=='o'&&!vis[i][j]){
g=bfs(i,j);
if(g) break;
}
}if(g) break;
}
printf("Case #%d: ",ca++);
if(g) puts("Can kill in one move!!!");
else puts("Can not kill in one move!!!");
}
return 0;
}
/*
23
xxxxxxxxx
xooooooox
oooooooxx
ooooooooo
ooooooooo
oooo.ooox
xxxxxxxxx
xxxxxxxxx
xxxxxxxxx
*/