#include<stdio.h>
#include<string.h>
int n;
char a[10];
char map[105][105][105];
int mark[105][105][105];
int to[6][3]={{1,0,0},{0,1,0},{0,0,1},{-1,0,0},{0,-1,0},{0,0,-1}};
struct
{
int x,y,z,id;
}queue[1000005],s,e,now,next;
int bfs()
{
memset(mark,0,sizeof(mark));
int fr,ed,i;
fr=ed=0;
s.id=0;
queue[ed++]=s;
mark[s.x][s.y][s.z]=1;
while(fr<ed)
{
now=queue[fr++];
if(now.x==e.x&&now.y==e.y&&now.z==e.z)
{
return now.id;
}
for(i=0;i<6;i++)
{
next.x=now.x+to[i][0];
next.y=now.y+to[i][1];
next.z=now.z+to[i][2];
if(next.x<0||next.y<0||next.z<0||next.x>=n||next.y>=n||next.z>=n||mark[next.x][next.y][next.z]==1||map[next.x][next.y][next.z]=='X')
{
continue;
}
mark[next.x][next.y][next.z]=1;
next.id=now.id+1;
queue[ed++]=next;
}
}
return -1;
}
int main()
{
while(scanf("%s%d",a,&n)!=EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%s",map[i][j]);
}
}
scanf("%d%d%d",&s.z,&s.y,&s.x);
scanf("%d%d%d",&e.z,&e.y,&e.x);
scanf("%s",a);
int t=bfs();
if(t==-1)
{
puts("NO ROUTE");
}
else
{
printf("%d %d\n",n,t);
}
}
}
Hdu1240 - Asteroids! - 广度优先搜索
最新推荐文章于 2020-02-02 20:43:17 发布