hdu 3316 Mine sweeping
题目的意思就是简单的扫雷游戏,每到一个点,便判断该点是否是k=0的点,若是则以这个点为中心自动触发它周围的与它相邻八个点,若在这八个点中有雷,则该点不触发;若该点不是k=0的点,则不自动触发它周围的点。(附代码)
1 # include <cstdio> 2 # include <cstring> 3 # include <cstdlib> 4 # include <iostream> 5 # include <queue> 6 using namespace std; 7 8 struct Point{ 9 int x, y; 10 }; 11 12 int n; 13 int startx, starty; 14 int step[8][2] = {{1, 0}, {1, 1} ,{0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}}; 15 char map[101][101]; 16 char visit[101][101]; 17 int temp[101][101]; 18 void BFS() 19 { 20 Point p, t; 21 int i; 22 queue<Point> que; 23 p.x = startx; 24 p.y = starty; 25 visit[p.x][p.y] = '0' + temp[p.x][p.y]; 26 que.push(p); 27 28 while(!que.empty()) 29 { 30 p = que.front(); 31 que.pop(); 32 if(temp[p.x][p.y] == 0) 33 { 34 for(i = 0; i < 8; ++i) 35 { 36 t.x = step[i][0] + p.x; 37 t.y = step[i][1] + p.y; 38 if(t.x < 0 || t.x >= n || t.y < 0 || t.y >= n 39 || visit[t.x][t.y] != '.' || temp[t.x][t.y] == -1) 40 continue; 41 if(temp[t.x][t.y] > 0) 42 { 43 visit[t.x][t.y] = temp[t.x][t.y] + '0'; 44 continue; 45 } 46 else if(temp[t.x][t.y] == 0) 47 { 48 visit[t.x][t.y] = temp[t.x][t.y] + '0'; 49 que.push(t); 50 continue; 51 } 52 } 53 } 54 } 55 } 56 int main() 57 { 58 freopen("in.txt", "r", stdin); 59 while(scanf("%d", &n) != EOF) 60 { 61 int i, j, k; 62 for(i = 0; i < n; ++i) 63 { 64 scanf("%s", map[i]); 65 } 66 67 scanf("%d %d", &startx, &starty); 68 69 for(i = 0; i < n; ++i) 70 { 71 for(j = 0; j < n; ++j) 72 { 73 temp[i][j] = 0; 74 visit[i][j] = '.'; 75 } 76 } 77 78 for(i = 0; i < n; ++i) 79 { 80 for(j = 0; j < n; ++j) 81 { 82 if(map[i][j] == 'X') 83 { 84 temp[i][j] = -1; 85 for(k =0 ; k < 8; ++k) 86 { 87 if(i + step[k][0] < 0 || i + step[k][0] >= n || 88 j + step[k][1] < 0 || j + step[k][1] >= n || temp[i + step[k][0]][j + step[k][1]] == -1) 89 continue; 90 temp[i + step[k][0]][j + step[k][1]] ++; 91 } 92 } 93 } 94 } 95 // for(i = 0; i < n; ++i) 96 // { 97 // for(j = 0; j < n; ++j) 98 // printf("%2d", temp[i][j]); 99 // printf("\n"); 100 // } 101 102 if(map[startx][starty] == 'X') 103 printf("it is a beiju!\n"); 104 else 105 { 106 BFS(); 107 for(i = 0; i < n; ++i) 108 { 109 for(j = 0; j < n; ++j) 110 { 111 if(visit[i][j] >= '0' && visit[i][j] <= '9') 112 printf("%c", visit[i][j]); 113 else 114 printf("."); 115 } 116 printf("\n"); 117 } 118 } 119 printf("\n"); 120 } 121 return 0; 122 }

浙公网安备 33010602011771号