#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <queue>
#define N 12
using namespace std;
struct Node{
int x;
int y;
int z;
int t;
};
Node start,end;
char Map[N][N][N];
int n;
int dx[]={1,-1,0,0,0,0};
int dy[]={0,0,1,-1,0,0};
int dz[]={0,0,0,0,1,-1};
void BFS(){
int i,j,k;
Node curn,nxtn;
queue<Node>Q;
Q.push(start);
Map[start.x][start.y][start.z] = 'X';
while(!Q.empty()){
curn = Q.front(),Q.pop();
if (curn.x == end.x && curn.y == end.y &&
curn.z == end.z)
{
end.t = curn.t;
return ;
}
for (i=0;i<6;i++)
{
nxtn.x = curn.x + dx[i];
nxtn.y = curn.y + dy[i];
nxtn.z = curn.z + dz[i];
nxtn.t = curn.t + 1;
if (nxtn.x>=0&&nxtn.y>=0&&nxtn.z>=0&&
nxtn.x<n&&nxtn.y<n&&nxtn.z<n&&
Map[nxtn.x][nxtn.y][nxtn.z]=='O')
{
Map[nxtn.x][nxtn.y][nxtn.z] = 'X';
Q.push(nxtn);
}
}
}
return;
}
int main(){
int i,j,k;
char str[10];
while(scanf("%s %d",&str,&n)!=EOF){
for (i=0;i<n;i++){
for (j=0;j<n;j++){
scanf("%s",&Map[i][j]);
}
}
scanf("%d %d %d",&start.x,&start.y,&start.z);
start.t = 0;
scanf("%d %d %d",&end.x,&end.y,&end.x);
end.t = -1;
scanf("%s",&str);
if (start.x == end.x && start.y == end.y &&
start.z == end.z){
printf("%d %d\n",n,0);
continue;
}else{
BFS();
if (-1 == end.t){
printf("NO ROUTE\n");
}else{
printf("%d %d\n",n,end.t);
}
continue;
}
}
return 0;
}
Asteroids! (广搜)
最新推荐文章于 2020-11-10 20:31:37 发布