POJ - 2251 Dungeon Master(三维BFS)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ - 2251 Dungeon Master(三维BFS)相关的知识,希望对你有一定的参考价值。
题目链接:http://poj.org/problem?id=2251
题意:三维BFS。
题解:大水题,只不过多加了两个方向
1 //poj2251 2 #include <queue> 3 #include <cstring> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std; 7 int sx,sy,sz,ex,ey,ez,L,R,C; 8 const int INF=0x3f3f3f3f; 9 10 int d[33][33][33]; 11 char map[33][33][33]; 12 int FX[6][3]={{0,0,1},{0,0,-1},{1,0,0},{-1,0,0},{0,1,0},{0,-1,0}}; 13 struct node{ 14 int x,y,z; 15 }; 16 17 bool ok(int x,int y,int z){ 18 if(x>=0&&x<L&&y>=0&&y<R&&z>=0&&z<C&&map[x][y][z]!=‘#‘&&d[x][y][z]==INF) 19 return 1; 20 return 0; 21 } 22 23 void bfs(){ 24 queue <node> Q; 25 node p; 26 p.x=sx,p.y=sy,p.z=sz; 27 d[sx][sy][sz]=0; 28 Q.push(p); 29 while(!Q.empty()){ 30 node q=Q.front(); 31 Q.pop(); 32 if(q.x==ex&&q.y==ey&&q.z==ez) break; 33 for(int i=0;i<6;i++){ 34 int dx=q.x+FX[i][0]; 35 int dy=q.y+FX[i][1]; 36 int dz=q.z+FX[i][2]; 37 node TnT; 38 TnT.x=dx,TnT.y=dy,TnT.z=dz; 39 if(ok(dx,dy,dz)){ 40 Q.push(TnT); 41 d[dx][dy][dz]=d[q.x][q.y][q.z]+1; 42 } 43 } 44 } 45 } 46 47 int main(){ 48 while(cin>>L>>R>>C){ 49 if(L==0&&R==0&&C==0) break; 50 for(int i=0;i<L;i++){ 51 for(int j=0;j<R;j++){ 52 cin>>map[i][j]; 53 for(int k=0;k<C;k++){ 54 d[i][j][k]=INF; 55 if(map[i][j][k]==‘S‘) {sx=i;sy=j;sz=k;} 56 if(map[i][j][k]==‘E‘) {ex=i;ey=j;ez=k;} 57 } 58 } 59 } 60 bfs(); 61 if(d[ex][ey][ez]==INF) cout<<"Trapped!"<<endl; 62 else cout<<"Escaped in "<<d[ex][ey][ez]<<" minute(s)."<<endl; 63 } 64 65 66 return 0; 67 }
以上是关于POJ - 2251 Dungeon Master(三维BFS)的主要内容,如果未能解决你的问题,请参考以下文章