POJ 2251
Posted huluxin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2251相关的知识,希望对你有一定的参考价值。
1 #include <cstdio> 2 #include <cmath> 3 #include <cstring> 4 #include <algorithm> 5 #include <queue> 6 #include <stack> 7 #include <vector> 8 #include <iomanip> 9 using namespace std; 10 char a[35][35][35]; 11 int vis[35][35][35]; 12 int l,n,m,mmin; 13 int sl,sx,sy,el,ex,ey; 14 int dir[15][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}; 15 int panduan(int z,int x,int y) 16 { 17 return z>=0&&z<l&&x>=0&&x<n&&y>=0&&y<m; 18 } 19 20 struct node 21 { 22 int x,y,z,f; 23 }; 24 node be; 25 void bfs() 26 { 27 queue<node>q; 28 be.f=0; 29 q.push(be); 30 while(!q.empty()) 31 { 32 node now=q.front(); 33 q.pop(); 34 if(a[now.z][now.x][now.y]==‘E‘) 35 { 36 mmin=min(mmin,now.f); 37 continue; 38 } 39 for(int i=0;i<6;i++) 40 { 41 int nl=now.z+dir[i][0]; 42 int nx=now.x+dir[i][1]; 43 int ny=now.y+dir[i][2]; 44 if(a[nl][nx][ny]!=‘#‘&&vis[nl][nx][ny]==0&&panduan(nl,nx,ny)) 45 { 46 //printf("%d %d %d %d ",nl,nx,ny,now.f+1); 47 vis[nl][nx][ny]=1; 48 node nex; 49 nex.z=nl,nex.x=nx,nex.y=ny,nex.f=now.f+1; 50 q.push(nex); 51 } 52 } 53 } 54 } 55 int main(int argc, char *argv[]) 56 { 57 while(scanf("%d%d%d",&l,&n,&m)!=EOF) 58 { 59 if(l==0&&n==0&&m==0) 60 break; 61 for(int i=0;i<l;i++) 62 { 63 for(int j=0;j<n;j++) 64 { 65 getchar(); 66 scanf("%s",a[i][j]); 67 for(int k=0;k<m;k++) 68 { 69 if(a[i][j][k]==‘S‘) 70 { 71 be.z=i;be.x=j;be.y=k; 72 } 73 } 74 } 75 } 76 memset(vis,0,sizeof(vis)); 77 vis[be.z][be.x][be.y]=1; 78 mmin=1e9; 79 bfs(); 80 if(mmin==1e9) 81 printf("Trapped! "); 82 else 83 printf("Escaped in %d minute(s). ",mmin); 84 } 85 return 0; 86 }
以上是关于POJ 2251的主要内容,如果未能解决你的问题,请参考以下文章