迷宫问题求最短路,只是本题为一个3D的迷宫,同样用bfs求解,在二维基础上加一维,其他的相同。
#include "iostream"
#include "queue"
#include "cstring"
using namespace std;
char maze[35][35][35];
int visit[35][35][35];
int stepArr[6][3] = {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; //有上、下、左、右、前、后六个方向
struct Node{
int x;
int y;
int z;
int step;
Node(int a,int b,int c,int d):x(a),y(b),z(c),step(d){};
};
int sx,sy,sz; //开始的位置
int L,R,C;
int bfs() {
Node node(sx,sy,sz,0);
queue<Node>q;
while(!q.empty()) q.pop(); //清空队列
q.push(node);
while(!q.empty()) {
node = q.front();
q.pop();
//z表示高对应L,x,y对应二维中的R,C
if(maze[node.z][node.x][node.y] == 'E') return node.step;
visit[node.z][node.x][node.y] = 1;
for(int i = 0; i < 6; i++) {
int x = node.x + stepArr[i][0];
int y = node.y + stepArr[i][1];
int z = node.z + stepArr[i][2];
if(x >= 0 && x < R && y >= 0 && y < C && z >= 0 && z < L && visit[z][x][y] == 0 && maze[z][x][y] != '#'){
visit[z][x][y] = 1;
Node next(x,y,z,node.step+1);
q.push(next);
}
}
}
return -1;
}
int main() {
while(cin >> L >> R >> C) {
if(L == 0 && R == 0 && C == 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];
if(maze[i][j][k] == 'S') {
sz = i;
sx = j;
sy = k;
}
}
memset(visit,0,sizeof(visit)); //当初自己做的时候忘了这一步,导致WA
int t = bfs();
if(t == -1) cout << "Trapped!" << endl;
else cout << "Escaped in " << t << " minute(s)." << endl;
}
return 0;
}