三维的广搜。。
#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; }