P1248链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1248
代码:
#include<bits/stdc++.h> using namespace std; int cs, a, b, stx, sty, stz, edx, edy, edz; char mp[45][45][45]; struct node{ int x, y, z, step; }; int fx, fy, fz, fstep; bool f; node que[2500]; int front, rear; int dir[6][3]={{-1,0,0},{1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; void bfs() { front=rear=1; que[rear].x=stx; que[rear].y=sty,que[rear].z=stz; que[rear].step=0; mp[stx][sty][stz]='#'; while(front<=rear){ fx=que[front].x; fy=que[front].y; fz=que[front].z; fstep=que[front].step; if(fx==edx && fy==edy && fz==edz){ cout<<"Escaped in "<<fstep<<" minute(s)."<<endl; f=1; break; } for(int i=0; i<6; i++){ int nx=fx+dir[i][0]; int ny=fy+dir[i][1]; int nz=fz+dir[i][2]; if(nx>=0 && nx<cs && ny>=0 && ny<a && nz>=0 && ny<b && mp[nx][ny][nz]=='.'){ mp[nx][ny][nz]='#'; rear++; que[rear].x=nx; que[rear].y=ny; que[rear].z=nz; que[rear].step=fstep+1; } } front++; } } int main() { while(1){ f=0; cin>>cs>>a>>b; if(cs==0 && a==0 && b==0) break; for(int i=0; i<cs; i++){ for(int j=0;j<a;j++) cin>>mp[i][j]; } for(int i=0;i<cs;i++){ for(int j=0;j<a;j++){ for(int k=0;k<b;k++){ if(mp[i][j][k]=='S'){ stx=i,sty=j,stz=k; } if(mp[i][j][k]=='E'){ edx=i,edy=j,edz=k; mp[i][j][k]='.'; } } } } bfs(); if(f==0) cout<<"Trapped!"<<endl; } return 0; }