题目链接
一道bfs的模版题目:
和常见的在二维平面的搜索不同,该题是空间内(三维)的搜索。
没有太大的难度,只需要增加相应的变量,增加两个搜索的方向即可,其它和一些二维的bfs差不多;
(看一下题目,再看下面的代码就可以看懂哦)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char map[35][35][35];
int book[37][37][37];
struct note
{
int x;
int y;
int z;
int f;//该题用不到这个变量;
int s;
};
int main()
{
int L,R,C;
int i,j,k;
while(scanf("%d%d%d",&L,&R,&C)&&(L||R||C))
{
getchar();
//i,j,k分别对应x,y,z轴;
int hx=0,hy=0,hz=0;
int tx=0,ty=0,tz=0;
for(k=1;k<=L;k++)
{
for(i=1;i<=R;i++)
{
for(j=1;j<=C;j++)
{
scanf("%c",&map[i][j][k]);
if(map[i][j][k]=='S') {hx=i;hy=j;hz=k;}
if(map[i][j][k]=='E') {tx=i;ty=j;tz=k;}
}
getchar();
}
getchar();
}
struct note queue[28000];
int head=1;
int tail=1;
int flag;
int xx[6]={0,-1,0,1,0,0};
int yy[6]={-1,0,1,0,0,0};
int zz[6]={0,0,0,0,1,-1};
memset(book,0,sizeof(book));
book[hx][hy][hz]=1;
queue[head].x=hx;
queue[head].y=hy;
queue[head].z=hz;
queue[head].f=0;
queue[head].s=0;
tail++;
while(head<tail)
{
for(i=0,flag=0;i<6;i++)
{
hx=xx[i]+queue[head].x;
hy=yy[i]+queue[head].y;
hz=zz[i]+queue[head].z;
if(hx<1||hx>R||hy<1||hy>C||hz<1||hz>L||map[hx][hy][hz]=='#')
continue;
if(book[hx][hy][hz]==0)
{
book[hx][hy][hz]=1;
queue[tail].x=hx;
queue[tail].y=hy;
queue[tail].z=hz;
queue[tail].f=head;
queue[tail].s=queue[head].s+1;
tail++;
}
if(hx==tx&&hy==ty&&hz==tz)
{
flag=1;
break;
}
}
if(flag==1) break;
head++;
}
if(queue[tail-1].s==0)
printf("Trapped!\n");
else
printf("Escaped in %d minute(s).\n",queue[tail-1].s);
}
return 0;
}