很简单的一道广度优先搜索题 #include<stdio.h>int a[11][11][11];int mark[11][11][11];int f[1011][4];int d[6][3]={{0,0,1},{0,1,0},{1,0,0,},{0,0,-1},{0,-1,0},{-1,0,0}};//六个方向int main(){ char str[10],c; int N,i,j,k; int p,rear,flag,dd; int si,sj,sk,di,dj,dk; while(scanf("%s",str)!=EOF) { scanf("%d",&N); // scanf("%c",&c); for(i=0;i<N;i++) { // scanf("%c",&c); for(j=0;j<N;j++) { scanf("%c",&c); for(k=0;k<N;k++) { mark[i][j][k]=0; scanf("%c",&c); if(c=='X') a[i][j][k]=-1; else if(c=='O') a[i][j][k]=1; } } }//for i scanf("%d%d%d",&si,&sj,&sk); scanf("%d%d%d",&di,&dj,&dk); scanf("%c",&c); scanf("%s",str); f[0][0]=si; f[0][1]=sj; f[0][2]=sk; f[0][3]=0; p=0; rear=0; flag=0; if(si==di&&sj==dj&&sk==dk) { printf("%d 0\n",N); continue; } while(p<=rear&&flag==0) { for(dd=0;dd<6;dd++) { si=f[p][0]+d[dd][0]; sj=f[p][1]+d[dd][1]; sk=f[p][2]+d[dd][2]; if(si==di&&sj==dj&&sk==dk) { printf("%d %d\n",N,f[p][3]+1); flag =1; break; } if(si>=0&&si<N&&sj>=0&&sj<N&&sk>=0&&sk<N&&a[si][sj][sk]==1&&mark[si][sj][sk]==0) { mark[si][sj][sk]=1; rear++; f[rear][0]=si; f[rear][1]=sj; f[rear][2]=sk; f[rear][3]=f[p][3]+1; } } p++; } if(p>rear) { printf("NO ROUTE\n"); } } return 0;}

评论