您的位置:首页 > 其它

poj 2251 Dungeon Master

2016-11-10 19:11 323 查看
    很简单的一道搜索模板题,,给出邻接矩阵,然后需要自己搜索找出起点和终点,剩下的纯粹就是套模板了。
<pre name="code" class="cpp">#include <iostream>
#include <stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int l,r,c,tx,ty,tz,x,y,z;
char a[31][31][31];
int book[31][31][31];
int ans;
struct node
{
int x,y,z;
int step;
};
queue<node>Q;
int ne[6][3]={{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};
int check(int x,int y,int z)
{   if(x<0||x>l||y<0||y>r||z<0||z>c)
return 0;
return 1;
}
int bfs(int bx,int by,int bz)
{
int i,j;
queue<node>Q;
node q,p;
q.x=bx;
q.y=by;
q.z=bz;
q.step=0;
a[bx][by][bz]='#';
Q.push(q);
while(!Q.empty())
{  p=Q.front();
Q.pop();
for(i=0;i<6;i++)
{    q=p;
q.x+=ne[i][0];
q.y+=ne[i][1];
q.z+=ne[i][2];
q.step++;
if(check(q.x,q.y,q.z)==0)
continue;
if(a[q.x][q.y][q.z]=='E')
{   ans=q.step;
return 1;}
if(a[q.x][q.y][q.z]=='.')
{    a[q.x][q.y][q.z]='#';
Q.push(q);
}

}

}
return 0;
}
int main()
{
while(scanf("%d%d%d",&l,&r,&c)&&(l!=0||r!=0||c!=0))
{
int i,j,k;
for(i=0;i<l;i++)
{
for(j=0;j<r;j++)
{
scanf("%s",a[i][j]);
}
}
for(i=0;i<l;i++)
{
for(j=0;j<r;j++)
{
for(k=0;k<c;k++)
{
if(a[i][j][k]=='S')
{
tx=i;
ty=j;
tz=k;
}
}
}
}
ans=0;
int flag=0;
flag=bfs(tx,ty,tz);
if(flag==0)
{
printf("Trapped!\n");
}
else
{
printf("Escaped in %d minute(s).\n",ans);
}
memset(a,0,sizeof(a));
memset(book,0,sizeof(book));
}
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: