1 条题解
-
1
#include<bits/stdc++.h> using namespace std; int jx,jy,jz,qx,qy,qz,zx,zy,zz,dx[] {0,1,0,-1,0,0},dy[] {1,0,-1,0,0,0},dz[] {0,0,0,0,-1,1},biao=1,sum,ans[35]; char g[35][35][35]; bool ch=0,vis[35][35][35],qq[35]; struct node { int x,y,z,step; }; bool check(int x,int y,int z) { if(x<1||y<1||z<1||x>jx||y>jy||z>jz)return 0; if(vis[x][y][z]==1)return 0; if(g[x][y][z]=='#')return 0; return 1; } void bfs(int x,int y,int z) { queue<node> q; q.push(node {x,y,z,0}); while(!q.empty()) { node fr=q.front(); q.pop(); if(fr.x==zx&&fr.y==zy&&fr.z==zz) { ans[biao++]=fr.step; return; } vis[fr.x][fr.y][fr.z]=1; for(int i=0; i<6; i++) { int nx=fr.x+dx[i]; int ny=fr.y+dy[i]; int nz=fr.z+dz[i]; if(check(nx,ny,nz)==1) vis[nx][ny][nz]=1,q.push(node {nx,ny,nz,fr.step+1}); } } ans[biao++]=-1; } int main() { ios::sync_with_stdio(0); cin.tie(nullptr); while(1) { memset(vis,0,sizeof(vis)); cin>>jx>>jy>>jz; if(jz==0&&jy==0&&jz==0)break; for(int i=1; i<=jx; i++) for(int j=1; j<=jy; j++) for(int o=1; o<=jz; o++) { cin>>g[i][j][o]; if(g[i][j][o]=='S') qx=i,qy=j,qz=o,g[i][j][o]='.'; if(g[i][j][o]=='E')zx=i,zy=j,zz=o,g[i][j][o]='.'; } bfs(qx,qy,qz); } for(int i=1; i<biao; i++) if(ans[i]==-1) cout<<"Trapped!"<<endl; else cout<<"Escaped in "<<ans[i]<<" minute(s)."<<endl; }
- 1
信息
- ID
- 218
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 6
- 已通过
- 3
- 上传者