三维迷宫,bfs搜索一下输出时间就行了~~~
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> using namespace std; typedef struct mg { int x, y, z, step; }node; char s[99][99][99]; int L, R, C, v[99][99][99]; int bfs(int x, int y, int z) { node a, b; int t = -1; queue<node>Q; a.x = x; a.y = y; a.z = z; a.step = 0; Q.push(a); v[x][y][z] = 1; while(!Q.empty()) { a = Q.front(); Q.pop(); if(a.z + 1 < C && s[a.x][a.y][a.z + 1] == 'E') { t = a.step + 1; break; } else if(s[a.x][a.y][a.z + 1] != '#' && v[a.x][a.y][a.z + 1] == 0 && a.z + 1 < C) { b.x = a.x; b.y = a.y; b.z = a.z + 1; b.step = a.step + 1; v[b.x][b.y][b.z] = 1; Q.push(b); } if(a.z - 1 >= 0 && s[a.x][a.y][a.z - 1] == 'E') { t = a.step + 1; break; } else if(s[a.x][a.y][a.z - 1] != '#' && v[a.x][a.y][a.z - 1] == 0 && a.z - 1 >= 0) { b.x = a.x; b.y = a.y; b.z = a.z - 1; b.step = a.step + 1; v[b.x][b.y][b.z] = 1; Q.push(b); } if(a.y + 1 < R && s[a.x][a.y + 1][a.z] == 'E') { t = a.step + 1; break; } else if(s[a.x][a.y + 1][a.z] != '#' && v[a.x][a.y + 1][a.z] == 0 && a.y + 1 < R) { b.x = a.x; b.y = a.y + 1; b.z = a.z; b.step = a.step + 1; v[b.x][b.y][b.z] = 1; Q.push(b); } if(a.y - 1 >= 0 && s[a.x][a.y - 1][a.z] == 'E') { t = a.step + 1; break; } else if(s[a.x][a.y - 1][a.z] != '#' && v[a.x][a.y - 1][a.z] == 0 && a.y - 1 >= 0) { b.x = a.x; b.y = a.y - 1; b.z = a.z; b.step = a.step + 1; v[b.x][b.y][b.z] = 1; Q.push(b); } if(a.x + 1 < L && s[a.x + 1][a.y][a.z] == 'E') { t = a.step + 1; break; } else if(s[a.x + 1][a.y][a.z] != '#' && v[a.x + 1][a.y][a.z] == 0 && a.x + 1 < L) { b.x = a.x + 1; b.y = a.y; b.z = a.z; b.step = a.step + 1; v[b.x][b.y][b.z] = 1; Q.push(b); } if(a.x - 1 >= 0 && s[a.x - 1][a.y][a.z] == 'E') { t = a.step + 1; break; } else if(s[a.x - 1][a.y][a.z] != '#' && v[a.x - 1][a.y][a.z] == 0 &&a.x - 1 >= 0) { b.x = a.x - 1; b.y = a.y; b.z = a.z; b.step = a.step + 1; v[b.x][b.y][b.z] = 1; Q.push(b); } } return t; } int main() { int i, k, j, x, z, y, t; while(cin>>L>>R>>C && (L || R || C)) { getchar(); memset(v,0,sizeof(v)); for(i = 0;i < L;i++) { for(j = 0;j < R;j++) { for(k = 0;k < C;k++) { cin>>s[i][j][k]; if(s[i][j][k] == 'S') { x = i; y = j; z = k; } } getchar(); } getchar(); } t = bfs(x,y,z); if(t < 0) printf("Trapped!\n"); else printf("Escaped in %d minute(s).\n",t); } return 0; }