Is an escape possible? If yes, how long will it take?
Input
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.
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<iostream>
#include<cstdio>
#include<string.h>
#include<math.h>
#include<string>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
const int INF = 100000000;
int mx[6] = { 0,0,1,0,-1,0 };
int my[6] = { 0,0,0,1,0,-1 };
int mz[6] = { -1,1,0,0,0,0 };
struct Point {
int x;
int y;
int z;
};
int L, R, C;
char maze[30][30][30];
int ans[30][30][30];
int main()
{
while (cin >> L >> R >> C) {
memset(maze, 0, sizeof(maze));
memset(ans, 0, sizeof(ans));
int l1, l2, r1, r2, c1, c2;
if (L == 0) {
break;
}
for (int i = 0; i<L; i++) {
for (int j = 0; j<R; j++) {
for (int k = 0; k<C; k++) {
cin >> maze[i][j][k];
ans[i][j][k] = INF;
if (maze[i][j][k] == 'S') {
l1 = i;
r1 = j;
c1 = k;
}
if (maze[i][j][k] == 'E') {
l2 = i;
r2 = j;
c2 = k;
}
}
}
}
ans[l1][r1][c1] = 0;
queue<Point> que;
Point temp = { c1,r1,l1 };
que.push(temp);
while (que.size()) {
Point flag = que.front();
que.pop();
if (maze[flag.z][flag.y][flag.x] == 'E') {
break;
}
for (int i = 0; i < 5; i++) {
int dx = flag.x + mx[i];
int dy = flag.y + my[i];
int dz = flag.z + mz[i];
if (dx < C && dx >= 0 && dy < R && dy >= 0 && dz < L && ans[dz][dy][dx] == INF) {
if (maze[dz][dy][dx] == '.' || maze[dz][dy][dx] == 'E') {
temp = { dx,dy,dz };
que.push(temp);
ans[dz][dy][dx] = ans[flag.z][flag.y][flag.x] + 1;
}
}
}
}
if (ans[l2][r2][c2] != INF)
printf("Escaped in %d minute(s).\n", ans[l2][r2][c2]);
else
printf("Trapped!\n");
}
return 0;
}
1681



被折叠的 条评论
为什么被折叠?



