Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 20598 | Accepted: 7971 |
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!
//队列,WA #include <iostream> #include<cstring> #include<queue> #include<cstdio> using namespace std; typedef struct node { int x,y,z; int lenth; }node; node sta; queue<node> Q; int xx[]={1,-1,0,0,0,0}; int yy[]={0,0,0,0,-1,1}; int zz[]={0,0,-1,1,0,0}; bool vis[40][40][40]; char ma[40][40][40]; int l,r,c; int bfs() { int dx,dy,dz; memset(vis,false,sizeof(vis)); sta.lenth=0; Q.push(sta); vis[sta.x][sta.y][sta.z]=true; while(!Q.empty()) { node cur=Q.front(); Q.pop(); for(int i=0;i<6;i++) { node next; dx=cur.x+xx[i]; dy=cur.y+yy[i]; dz=cur.z+zz[i]; if(!vis[dx][dy][dz] && (ma[dx][dy][dz]=='.' || ma[dx][dy][dz]=='E') && dx>=0 && dx<l && dy>=0 && dy<r && dz>=0 && dz<c) { vis[dx][dy][dz]=true; next.x=dx; next.y=dy; next.z=dz; next.lenth=cur.lenth+1; Q.push(next); if(ma[dx][dy][dz]=='E') return next.lenth; } } } return 0; } int main() { int i,j,k,key; while(scanf("%d%d%d\n",&l,&r,&c)) { if(l==0 && r==0 && c==0) break; for(i=0;i<l;i++,getchar()) for(j=0;j<r;j++,getchar()) for(k=0;k<c;k++) { scanf("%c",&ma[i][j][k]); if(ma[i][j][k]=='S') sta.x=i,sta.y=j,sta.z=k; } key=bfs(); if(key) printf("Escaped in %d minute(s).\n",key); else printf("Trapped!\n"); } return 0; }
//数组,AC #include <iostream> #include<cstring> #include<cstdio> using namespace std; struct q{ int x,y,z; }q[30000]; int length[30000]; int xx[]={1,-1,0,0,0,0}; int yy[]={0,0,0,0,-1,1}; int zz[]={0,0,-1,1,0,0}; bool dis[40][40][40]; char ma[40][40][40]; int l,r,c,sx,sy,sz; int bfs() { int rear,front,dx,dy,dz,i; memset(dis,false,sizeof(dis)); memset(length,0,sizeof(length)); q[0].x=sx,q[0].y=sy,q[0].z=sz; front=rear=0; while(front<=rear) { for(i=0;i<6;i++) { dx=q[front].x+xx[i]; dy=q[front].y+yy[i]; dz=q[front].z+zz[i]; if(!dis[dx][dy][dz] && (ma[dx][dy][dz]=='.' || ma[dx][dy][dz]=='E') && dx>=0 && dx<l && dy>=0 && dy<r && dz>=0 && dz<c) { dis[dx][dy][dz]=true; q[++rear].x=dx; q[rear].y=dy; q[rear].z=dz; length[rear]=length[front]+1; if(ma[dx][dy][dz]=='E') return length[rear]; } } front++; } return 0; } int main() { int i,j,k,key; while(scanf("%d%d%d\n",&l,&r,&c)) { if(l==0 && r==0 && c==0) break; for(i=0;i<l;i++,getchar()) for(j=0;j<r;j++,getchar()) for(k=0;k<c;k++) { scanf("%c",&ma[i][j][k]); if(ma[i][j][k]=='S') sx=i,sy=j,sz=k; } key=bfs(); if(key) printf("Escaped in %d minute(s).\n",key); else printf("Trapped!\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
poj 2251 Dungeon Master(三维BFS)(中等)
原文地址:http://blog.csdn.net/kaisa158/article/details/47083689