本文共 1533 字,大约阅读时间需要 5 分钟。
#include#include #include #include #include #include using namespace std;char Map[20][20];int dis[10][10] = { {0,1},{0,-1},{-1,0},{1,0}};bool vis1[20][20];bool vis2[20][20];//int num = 0;int DFS(int x, int y){ vis1[x][y] = true; int sum = 0; for(int i = 0; i < 4; i++) { int a,b; a = x + dis[i][0]; b = y + dis[i][1]; if(a >= 1 && a <= 9 && b >= 1 && b <= 9) { if(Map[a][b] == '.' && !vis2[a][b]) { sum++; vis2[a][b] = true; } else if(Map[a][b] == 'o' && !vis1[a][b]) { sum += DFS(a,b); } } } return sum;}int main(){ int T; cin >> T; int t = 0; while(T--) { t++; memset(vis1,false,sizeof(vis1)); memset(vis2,false,sizeof(vis2)); for(int i = 1; i <= 9; i++) { for(int j = 1; j <= 9; j++) { cin >> Map[i][j]; } } bool flag = false; for(int i = 1; i <= 9; i++) { for(int j = 1; j <= 9; j++) { if(Map[i][j] == 'o' && !vis1[i][j]) { int num = 0; vis1[i][j] = true; for(int k = 0; k < 4; k++) { int x = dis[k][0] + i; int y = dis[k][1] + j; if(x >= 1 && x <= 9 && y >= 1 && y <= 9) { if(Map[x][y] == '.' && !vis2[x][y]) { num++; vis2[x][y] = true; } else if(Map[x][y] == 'o' && !vis1[x][y]) { num += DFS(x,y); } } } memset(vis2,false,sizeof (vis2)); if(num == 1) { flag = true; } } } } if(flag) { printf("Case #%d: Can kill in one move!!!\n",t); } else { printf("Case #%d: Can not kill in one move!!!\n",t); }//// cout << "Case #" << t << ": ";// if(flag)// {// cout << "Can kill in one move!!!" << endl;// }// else cout << "Can not kill in one move!!!" << endl; } return 0;}
转载地址:http://lnwtb.baihongyu.com/