C language source code: [cpp] # include <stdio. h> int s [51] [51] [51]; int queue [500000] [3]; int main () {int I, j, k, T, n, a, B, c, front, rear, num, flag; while (scanf ("% d", & n )! = EOF) {while (n --) {scanf ("% d", & a, & B, & c, & T ); for (I = 0; I <a; I ++) for (j = 0; j <B; j ++) for (k = 0; k <c; k ++) scanf ("% d", & s [I] [j] [k]); if (s [A-1] [b-1] [C-1] = 1) {printf ("-1 \ n"); continue;} s [0] [0] [0] = 0; front = 0; rear = 0; num = 0; flag = 1; queue [0] [0] = 0; queue [0] [1] = 0; queue [0] [2] = 0; rear ++; while (front! = Rear) {I = queue [front] [0]; j = queue [front] [1]; k = queue [front] [2]; front ++; if (s [I] [j] [k]! = 1) {s [I] [j] [k] = 1; if (I = A-1 & j = B-1 & k = C-1) break; if (I> 0 & s [I-1] [j] [k] = 0) {queue [rear] [0] = I-1; queue [rear] [1] = j; queue [rear] [2] = k; rear ++ ;} if (I <A-1 & s [I + 1] [j] [k] = 0) {queue [rear] [0] = I + 1; queue [rear] [1] = j; queue [rear] [2] = k; rear ++ ;} if (j> 0 & s [I] [J-1] [k] = 0) {queue [rear] [0] = I; queue [rear] [1] = J-1; queue [rear] [2] = k; rear ++ ;} if (j <B-1 & s [I] [j + 1] [k] = 0) {queue [rear] [0] = I; queue [rear] [1] = j + 1; queue [rear] [2] = k; rear ++ ;} if (k> 0 & s [I] [j] [k-1] = 0) {queue [rear] [0] = I; queue [rear] [1] = j; queue [rear] [2] = K-1; rear ++ ;} if (k <C-1 & s [I] [j] [k + 1] = 0) {queue [rear] [0] = I; queue [rear] [1] = j; queue [rear] [2] = k + 1; rear ++ ;}} if (front = flag) {flag = rear; num ++; }}if (num <= T & s [A-1] [b-1] [C-1] = 1) printf ("% d \ n", num ); else printf ("-1 \ n ");}}}