POJ 2251 Dungeon Master
Posted wwq-19990526
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 2251 Dungeon Master相关的知识,希望对你有一定的参考价值。
题目连接:http://poj.org/problem?id=2251
题目意思看图就能明白,这题的输出格式要小心,因为格式问题(输出换行后还有一行),一直没ac,今天才又仔细看了一遍自己的代码,检查代码确实无误后,再将别人的代码测了下数据,就发现了格式问题。(诶,坑人啊)
这题就是用bfs,我觉得这题可以作为bfs入门的案例题了,一个模板就行了,还有一点结构体;
接下来就是自己的代码了:
1 #include<iostream> 2 #include<queue> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 char str[30][30][30]; 7 int visit[30][30][30];//每个位子访问状态,1表示可访问,0不可走或已走; 8 int a,b,c; 9 int xx[6]={1,-1,0,0,0,0},yy[6]={0,0,1,-1,0,0},zz[6]={0,0,0,0,1,-1};//6个方向,上,下,前,后,左,右; 10 11 struct lpl 12 { 13 int x,y,z;//记录坐标的位子; 14 int count;//记录到这个位子的步数; 15 }; 16 17 lpl begin,end,next,now;//起始位子和终点位子; 18 19 bool vis(int x,int y,int z)//判断每个位子的状态 20 { 21 if(x<0||x>=a||y<0||y>=b||z<0||z>=c)//越界 22 return false; 23 else if(visit[x][y][z]==0)//已访问或不可访问状态 24 return false; 25 else 26 return true; 27 } 28 29 void bfs(lpl index) 30 { 31 queue<lpl> dui; 32 dui.push(index); 33 while(!dui.empty()) 34 { 35 now=dui.front(); 36 //visit[now.x][now.y][now.z]=0; 37 for(int i=0;i<6;i++) 38 { 39 if(vis(now.x+xx[i],now.y+yy[i],now.z+zz[i])) 40 { 41 next.x=now.x+xx[i]; 42 next.y=now.y+yy[i]; 43 next.z=now.z+zz[i]; 44 next.count=now.count+1; 45 visit[next.x][next.y][next.z]=0; 46 if(next.x==end.x&&next.y==end.y&&next.z==end.z) 47 { 48 end.count=next.count; 49 return; 50 } 51 dui.push(next); 52 } 53 } 54 dui.pop(); 55 } 56 return; 57 } 58 59 int main() 60 { 61 while(cin>>a>>b>>c) 62 { 63 if(a==0&&b==0&&c==0) 64 return 0; 65 //getchar(); 66 memset(visit,0,sizeof(visit)); 67 for(int i=0;i<a;i++) 68 { 69 for(int j=0;j<b;j++) 70 { 71 for(int k=0;k<c;k++) 72 { 73 cin>>str[i][j][k]; 74 if(str[i][j][k]==‘S‘) 75 { 76 begin.x=i;begin.y=j;begin.z=k; 77 } 78 else if(str[i][j][k]==‘E‘) 79 { 80 end.x=i;end.y=j;end.z=k; 81 visit[i][j][k]=1; 82 } 83 else if(str[i][j][k]==‘.‘) 84 visit[i][j][k]=1; 85 } 86 getchar(); 87 } 88 } 89 end.count=-1; 90 begin.count=0; 91 bfs(begin); 92 if(end.count==-1) 93 cout<<"Trappled!"<<endl; 94 else 95 cout<<"Escaped in "<<end.count<<" minute(s)."<<endl; 96 } 97 return 0; 98 }
以上是关于POJ 2251 Dungeon Master的主要内容,如果未能解决你的问题,请参考以下文章