输入 The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size). L is the number of levels making up the dungeon. R and C are the number of rows and columns making up the plan of each level. Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C. 输出 Each maze generates one line of output. If it is possible to reach the exit, print a line of the form Escaped in x minute(s). where x is replaced by the shortest time it takes to escape. If it is not possible to escape, print the line Trapped! 例子输入 3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0 例子输出 Escaped in 11 minute(s). Trapped! #include <stdio.h> #include <string.h> #include <queue> using std::queue; char map[32][32][32], vis[32][32][32]; int a, b, c, X, Y, Z; const int mov[][3] = {0, 0, 1, 0, 0, -1, 0, 1, 0, 0, -1, 0, 1, 0, 0, -1, 0, 0}; struct Node{ int x, y, z, steps; }; queue<Node> Q; bool check(Node t){ if(t.x < 0 || t.y < 0 || t.z < 0) return 0; if(t.x >= a || t.y >= b || t.z >= c) return 0; if(vis[t.x][t.y][t.z] || map[t.x][t.y][t.z] == '#') return 0; return 1; } void BFS(){ while(!Q.empty()) Q.pop(); Node t, n = {0}; n.x = X; n.y = Y; n.z = Z; vis[X][Y][Z] = 1; Q.push(n); while(!Q.empty()){ n = Q.front(); Q.pop(); for(int i = 0; i < 6; ++i){ t = n; ++t.steps; t.x += mov[i][0]; t.y += mov[i][1]; t.z += mov[i][2]; if(check(t)){ if(map[t.x][t.y][t.z] == 'E'){ printf("Escaped in %d minute(s).\n", t.steps); return; } vis[t.x][t.y][t.z] = 1; Q.push(t); } } } printf("Trapped!\n"); } int main(){ while(scanf("%d%d%d", &a, &b, &c), a || b || c){ memset(vis, 0, sizeof(vis)); for(int i = 0; i < a; ++i){ for(int j = 0; j < b; ++j){ scanf("%s", map[i][j]); for(int k = 0; k < c; ++k) if(map[i][j][k] == 'S'){ X = i; Y = j; Z = k; } } } BFS(); } return 0; }
版权声明:本文博客原创文章,博客,未经同意,不得转载。
转载于:https://www.cnblogs.com/bhlsheji/p/4732439.html
相关资源:数据结构—成绩单生成器