三维的BFS
#include <iostream>
#include <algorithm>
#include <set>
#include <map>
#include <string.h>
#include <queue>
#include <sstream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
char str[10];
int n;
int sx,sy,sz;
int ex,ey,ez;
int ans ;
int vis[33][33][33];
char p[33][33][33];
int dir[6][3] = {{0,0,1},{0,0,-1},{1,0,0},{-1,0,0},{0,-1,0},{0,1,0}};
struct node
{
int x,y,z;
int step;
};
int bfs ()
{
memset(vis,0,sizeof(vis));
node qq,qqq;
qq.x = sx;
qq.y = sy;
qq.z = sz;
qq.step = 0;
vis[qq.x][qq.y][qq.z] = 1;
queue<node> q;
q.push(qq);
while (!q.empty())
{
qqq = q.front();
q.pop();
if (qqq.x == ex && qqq.y == ey && qqq.z == ez)
{
ans = qqq.step;
return 1;
}
for(int i=0;i<6;i++)
{
qq.x = qqq.x + dir[i][0];
qq.y = qqq.y + dir[i][1];
qq.z = qqq.z + dir[i][2];
qq.step = qqq.step;
if (qq.x < 0 || qq.x >=n || qq.y < 0 || qq.y >=n || qq.z < 0 || qq.z >=n )
continue;
if(vis[qq.x][qq.y][qq.z] || p[qq.x][qq.y][qq.z]=='X')
continue;
vis[qq.x][qq.y][qq.z] = 1;
qq.step = qqq.step + 1;
q.push(qq);
}
}
return 0;
}
int main()
{
while (scanf ("%s%d",str,&n)!=EOF)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%s",p[i][j]);
}
}
scanf("%d %d %d",&sx,&sy,&sz);
scanf("%d %d %d",&ex,&ey,&ez);
scanf("%s",str);
p[ex][ey][ez] = 0;
if (bfs())
{
printf("%d %d\n",n,ans);
}
else
printf("NO ROUTE\n");
}
return 0;
}