题意:三维的空间,给定起点和终点,要求最少的步数。
分析:一般的 广搜,就是读入这个图有点麻烦,弄晕了
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
char map[11][11][11];
bool vis[11][11][11];
int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
int n,ans;
int ei,ej,ez;
struct node
{
int x,y,z,cnt;
node(int a=0,int b=0,int c=0,int d=0):x(a),y(b),z(c),cnt(d){}
};
void BFS(node f)
{
queue<node> Q;
Q.push(f);
node temp;
while(!Q.empty())
{
temp=Q.front();
Q.pop();
if(temp.x==ei && temp.y==ej && temp.z==ez)
{
ans=temp.cnt;
return ;
}
for(int k=0;k<6;k++)
{
int x=temp.x+dir[k][0];
int y=temp.y+dir[k][1];
int z=temp.z+dir[k][2];
if(x<0 || x>=n || y<0|| y>=n || z<0||z>=n || vis[x][y][z]||map[x][y][z]=='X')
continue;
vis[x][y][z]=1;
Q.push(node(x,y,z,temp.cnt+1));
}
}
}
int main()
{
char str[10];
int si,sj,sz;
while(scanf("%s %d",str,&n)==2)
{
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
{
getchar();
for(int j=0;j<n;j++)
{
scanf("%c",&map[i][j][k]);
}
}
scanf("%d %d %d",&si,&sj,&sz);
scanf("%d %d %d",&ei,&ej,&ez);
scanf("%s",str);
memset(vis,0,sizeof(vis));
vis[si][sj][sz]=1;
node f=node(si,sj,sz,0);
ans=-1;
BFS(f);
if(ans==-1)
puts("NO ROUTE");
else
printf("%d %d\n",n,ans);
}
return 0;
}