#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAX 100 struct queue{ int x,y,z,steps; }que[MAX*MAX*MAX*2+1]; int map[MAX+2][MAX+2][MAX+2]; int di[][3]={1,0,0,0,1,0,0,0,1,-1,0,0,0,-1,0,0,0,-1}; int BFS(); int inmap(int ax,int by,int cz); int a,b,c,T; int BFS() { int i,j,tx,ty,tz,front=0,rear=1; que[0].x=1,que[0].y=1,que[0].z=1,que[0].steps=0; map[0][0][0]=1; while(front<rear) { if(que[front].x == a && que[front].y== b && que[front].z== c) { return que[front].steps; } for(i=0;i<6;i++) { tx=que[front].x+di[i][0],ty=que[front].y+di[i][1],tz=que[front].z+di[i][2]; if(inmap(tx,ty,tz) && !map[tx][ty][tz]) { map[tx][ty][tz]=1; que[rear].x=tx,que[rear].y=ty,que[rear].z=tz; que[rear++].steps=que[front].steps+1; } } front++; } return -1; } int inmap(int ax,int by,int cz) { if(ax>0 && ax <= a && by >0 && by <=b && cz>0 && cz <= c) return 1; else return 0; } int main() { int cases,judge; int i,j,k; scanf("%d",&cases); while(cases--) { memset(map,0,sizeof(map)); scanf("%d%d%d%d",&a,&b,&c,&T); for(i=1;i<=a;i++) { for(j=1;j<=b;j++) { for(k=1;k<=c;k++) scanf("%d",&map[i][j][k]); } } if(a+b+c-3 > T) printf("-1\n"); else{ judge=BFS(); if(judge == -1) printf("-1\n"); else if(judge <= T) printf("%d\n",judge); else printf("-1\n"); } } return 0; } /************************************************************** Problem: 2234 User: admin Language: C++ Result: Accepted Time:41 ms Memory:36540 kb ****************************************************************/