您的位置:首页 > 其它

poj 2251 Dungeon Master(bfs)

2013-01-26 13:54 495 查看
题目:http://poj.org/problem?id=2251

View Code

#include <iostream>
#include<cstdio>
#include<cstring>
#define pan(a,b,c) (a<=b&&b<=c)
using namespace std;
int dir[6][3]={{0,0,-1},{0,0,1},{-1,0,0},{1,0,0},{0,-1,0},{0,1,0}};
int ex,ey,ez;
char str[35][35][35];
int map[35][35][35];
struct node
{
int x,y,z;
int num;
}que[30010];
int main()
{
int m,n,t;
int i,j,k;
int sx,sy,sz;
while(scanf("%d%d%d%*c",&t,&m,&n)!=EOF)
{
if(t==0&&m==0&&n==0)
break;
for(i=1;i<=t;i++)
{
for(j=1;j<=m;j++)
{
for(k=1;k<=n;k++)
{
cin>>str[i][j][k];
if(str[i][j][k]=='S')
{
sx=i;
sy=j;
sz=k;
}
}
}
}
memset(map,0,sizeof(map));
int head=0;
int tail=1;
que[0].x=sx;
que[0].y=sy;
que[0].z=sz;
que[0].num=0;
map[sx][sy][sz]=1;
int xx,yy,zz;
int flag=0;
while(head<tail)
{

for(i=0;i<6;i++)
{
xx=que[head].x+dir[i][0];
yy=que[head].y+dir[i][1];
zz=que[head].z+dir[i][2];

if(str[xx][yy][zz]=='E')
{
printf("Escaped in %d minute(s).\n",que[head].num+1);
flag=1;
break;
}
if(pan(1,xx,t)&&pan(1,yy,m)&&pan(1,zz,n)&&map[xx][yy][zz]==0&&str[xx][yy][zz]=='.')
{
que[tail].x=xx;
que[tail].y=yy;
que[tail].z=zz;
que[tail].num=que[head].num+1;
map[xx][yy][zz]=1;
tail++;
}
}
if(flag)
break;
head++;
}
if(!flag)
{
puts("Trapped!");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: