hdu 1240 Asteroids!

三维的广搜。。


#include<stdio.h>
#include<string.h>
#define Maxn 15
char map[Maxn][Maxn][Maxn];
int N,A,B,C,D,E,F;
char start[Maxn];
char end[Maxn];
int move[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
typedef struct
{
   int x,y,z,n;
}node;
node q,p;
node que[1088];
int main()
{
   while(scanf("%s%d",start,&N)!=EOF)
   {
      int i,j;
      for(i=0;i<N;i++)
      {
         for(j=0;j<N;j++)
         {
            scanf("%s",map[i][j]);
         }
      }
      scanf("%d%d%d%d%d%d",&A,&B,&C,&D,&E,&F);
      scanf("%s",end);
      q.x=A,q.y=B,q.z=C,q.n=0;
      map[A][B][C]='X';
      int head=1;
      int rear=1;
      int ok=0;
      que[rear++]=q;
      while(head<rear)
      {
         q=que[head];
         head++;
         if(q.x==D&&q.y==E&&q.z==F)
         {
            printf("%d %d\n",N,q.n);
            ok=1;
            break;
         }
         int tx,ty,tz;
         for(i=0;i<6;i++)
         {
            tx=q.x+move[i][0];
            ty=q.y+move[i][1];
            tz=q.z+move[i][2];
            if(tx>=0&&tx<N&&ty>=0&&ty<N&&tz>=0&&tz<N)
            {
               if(map[tz][tx][ty]=='O')
               {
                  map[tz][tx][ty]='X';
                  p.x=tx,p.y=ty,p.z=tz,p.n=q.n+1;
                  que[rear].x=tx,que[rear].y=ty,que[rear].z=tz,que[rear].n=q.n+1;
                  rear++;
               }
            }
         }
      }
      if(!ok)
      {
          printf("NO ROUTE\n");
      }
   }
   return 0;
}


原文地址:https://www.cnblogs.com/yyf573462811/p/6365414.html