| 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