Input
Output
Escaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
三维迷宫最短路,BFS直接套板子即可。
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <cstring> #include <queue> using namespace std; int L,R,C; char mmap[35][35][35]; bool vis[35][35][35]={0}; int dir[6][3]={{-1,0,0},{1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};//x y z struct point { int x; int y; int z; int cnt; }; point start,end; void bfs()//cnt统计步数 { memset(vis,0,sizeof(vis)); queue<point>q; point pre,nxt; vis[start.z][start.x][start.y]=1; start.cnt=0; q.push(start); while(!q.empty()) { pre=q.front(); q.pop(); if(pre.x==end.x&&pre.y==end.y&&pre.z==end.z) { cout<<"Escaped in "<<pre.cnt<<" minute(s)."<<endl; return; } int i; for(i=0;i<6;i++) { int nx=pre.x+dir[i][0]; int ny=pre.y+dir[i][1]; int nz=pre.z+dir[i][2]; if(nx>=0&&nx<R&&ny>=0&&ny<C&&nz>=0&&nz<L&&mmap[nz][nx][ny]!=‘#‘&&!vis[nz][nx][ny])//也可以写成mmap[nz][nx][ny]==‘.‘||mmap[nz][nx][ny]==‘E‘ 但不要只写 ==‘.‘ { nxt.x=nx; nxt.y=ny; nxt.z=nz; nxt.cnt=pre.cnt+1; q.push(nxt); vis[nz][nx][ny]=1; } } } cout<<"Trapped!"<<endl; } int main() { while(scanf("%d%d%d",&L,&R,&C)&&L&&R&&C) { int i,j,k; for(i=0;i<L;i++) { for(j=0;j<R;j++) { scanf("%s",&mmap[i][j]); } getchar(); getchar(); } for(i=0;i<L;i++) { for(j=0;j<R;j++) { for(k=0;k<C;k++) { if(mmap[i][j][k]==‘S‘) { start.x=j; start.y=k; start.z=i; } else if(mmap[i][j][k]==‘E‘) { end.x=j; end.y=k; end.z=i; } } } } bfs(); } }
原文:https://www.cnblogs.com/lipoicyclic/p/12317538.html