您的位置:首页 > 其它

poj 2251 Dungeon Master( bfs )

2013-08-26 17:30 453 查看
题目:http://poj.org/problem?id=2251

简单三维 bfs不解释, 1A, 上代码

#include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<iomanip>
#include<cmath>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;

int a,b,c;
int vis[50][50][50],G[50][50][50];
int dx[6]={0,0,0,0,-1,1};
int dy[6]={0,0,1,-1,0,0};
int dz[6]={1,-1,0,0,0,0};
struct node
{
int l,r,c,step;
}e,s,pos,next;
int bfs(int l,int r,int c)
{
int i;
queue<node>q;
next.l=l; next.r=r; next.c=c; next.step=0;
vis[l][r][c]=1;
q.push(next);
while(!q.empty())
{
pos=q.front();
q.pop();
for(i=0; i<6; i++)
{
next.l=pos.l+dx[i]; next.r=pos.r+dy[i];
next.c=pos.c+dz[i]; next.step=pos.step+1;
if(!vis[next.l][next.r][next.c]&&G[next.l][next.r][next.c])
{
vis[next.l][next.r][next.c]=1;
q.push(next);
}
if(next.l==s.l&&next.r==s.r&&next.c==s.c)
return next.step;
}
}
return -1;
}
int main()
{
int i,j,k,x;
char ch;
while(cin>>a>>b>>c&&(a!=0||b!=0||c!=0))
{
memset(G,0,sizeof(G));
memset(vis,0,sizeof(vis));
for(i=1; i<=a; i++)
for(j=1; j<=b; j++)
for(k=1; k<=c; k++)
{
cin>>ch;
if(ch=='.')
G[i][j][k]=1;
if(ch=='E')
{
e.l=i; e.r=j; e.c=k;
G[i][j][k]=1;
}
if(ch=='S')
{
s.l=i; s.r=j; s.c=k;
G[i][j][k]=1;
}
}
x=bfs(e.l,e.r,e.c);
if(x==-1)
cout<<"Trapped!"<<endl;
else
printf("Escaped in %d minute(s).\n",x);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: