Asteroids! (广搜)

#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! (广搜))