三维的BFS求最短路。
自己测试数据用的输出最后一定要注释掉,交了很多次居然一直Output Limite,居然一直都没有发现多输出了数据,被自己蠢哭。
以后一定要仔细检查输出。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #include<stack> #include<vector> using namespace std; typedef struct { int x,y,z; int step; }Point; char a[31][31][31]; int vis[31][31][31]; int l,r,c,mi,flag; int sx,sy,sz,ex,ey,ez; int next[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1} }; int Bfs() { Point f1,f2; f1.x=sx,f1.y=sy,f1.z=sz,f1.step=0; queue<Point>q; q.push(f1); vis[sx][sy][sz]=1; while(!q.empty()) { f1=q.front(); if(f1.x==ex&&f1.y==ey&&f1.z==ez){flag=1;return f1.step;} q.pop(); for(int i=0;i<6;i++) { f2.x=f1.x+next[i][0]; f2.y=f1.y+next[i][1]; f2.z=f1.z+next[i][2]; f2.step=f1.step+1; if(f2.x>=0&&f2.x<r&&f2.y>=0&&f2.y<c&&f2.z>=0&&f2.z<l&&!vis[f2.x][f2.y][f2.z]&&a[f2.z][f2.x][f2.y]!='#') { // cout<<f2.x<<" "<<f2.y<<" "<<f2.z<<endl; vis[f2.x][f2.y][f2.z]=1; q.push(f2); } } } return 0; } int main() { while(scanf("%d%d%d",&l,&r,&c),l+r+c) { for(int i=0;i<l;i++) for(int j=0;j<r;j++) for(int k=0;k<c;k++) { cin>>a[i][j][k]; if(a[i][j][k]=='S') sx=j,sy=k,sz=i; if(a[i][j][k]=='E') ex=j,ey=k,ez=i; } flag=0; memset(vis,0,sizeof(vis)); int g=Bfs(); if(flag==0) printf("Trapped! "); else printf("Escaped in %d minute(s). ",g); } return 0; }