标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 20867 | Accepted: 8090 |
Description
Input
Output
Escaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s).Trapped!
三维的bfs和2维的差不多,多个坐标,数据不是太大,如果数据太大那就要考虑内存问题了 2015,8,5
#include<stdio.h> #include<iostream> #include<string.h> #include<queue> using namespace std; char mp[35][35][35]; int vis[35][35][35],dis[35][35][35]; int dx[6]={0,0,-1,1,0,0}; int dy[6]={0,0,0,0,1,-1}; int dz[6]={1,-1,0,0,0,0}; int n,m,l; struct node{ int x,y,z,d; friend bool operator < (node a,node b){ return a.d>b.d;//优先队列,d小的先出队,d表示到起点的长度 } }s,t,num; void bfs(int x,int y,int z){ memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis)); priority_queue<node> q; t.x=x; t.y=y; t.z=z; t.d=0; vis[x][y][z]=1; q.push(t); while(!q.empty()){ s=q.top(); q.pop(); for(int i=0;i<6;i++){ int a=s.x+dx[i]; int b=s.y+dy[i]; int c=s.z+dz[i]; if(a>=1&&b>=1&&c>=1&&a<=n&&b<=m&&c<=l&&mp[a][b][c]!='#'&&!vis[a][b][c]){ vis[a][b][c]=1; dis[a][b][c]=dis[s.x][s.y][s.z]+1; num.x=a; num.y=b; num.z=c; num.d=dis[a][b][c]; q.push(num); } } } } int main(){ int i,j,k,sx,sy,sz,ex,ey,ez; while(scanf("%d%d%d",&l,&n,&m),l+n+m){ for(k=1;k<=l;k++) for(i=1;i<=n;i++) for(j=1;j<=m;j++){ cin>>mp[i][j][k]; if(mp[i][j][k]=='S'){ sx=i; sy=j; sz=k; } if(mp[i][j][k]=='E'){ ex=i; ey=j; ez=k; } } bfs(sx,sy,sz); if(dis[ex][ey][ez]!=0) printf("Escaped in %d minute(s).\n",dis[ex][ey][ez]); else printf("Trapped!\n"); } return 0; }
poj 2251 Dungeon Master(优先队列bfs)
标签:
原文地址:http://blog.csdn.net/ling_du/article/details/47302859