#include <iostream> #include <queue> #include <cstdio> #include <cstring> using namespace std; const int N = 55; bool hash[N][N][N]; int map[N][N][N]; int dx[] = {1, 0, 0,-1, 0, 0}; int dy[] = {0, 0, 1, 0, 0, -1}; int dz[] = {0, -1, 0,0, 1, 0}; int a, b, c, time; // 结构体这么用方便点 struct node { int x, y, z, time; node() {}; node(int xx, int yy, int zz, int t) : x(xx), y(yy), z(zz), time(t){}; }; void BFS() { memset(hash, false, sizeof(hash)); hash[0][0][0] = true; node now, next; queue<node>Q; Q.push(node(0, 0, 0, 0)); while(!Q.empty()) { now = Q.front(); Q.pop(); if(now.x == a - 1 && now.y == b - 1 && now.z == c - 1 && now.time <= time) { printf("%d/n", now.time); return ; } if(now.x == a - 1 && now.y == b- 1 && now.z == c - 1 && now.time > time) { printf("-1/n"); return ; } for(int i = 0; i < 6; i++) { if(now.x + dx[i] < 0 || now.x + dx[i] >= a || now.y + dy[i] < 0 || now.y + dy[i] >= b || now.z + dz[i] < 0 || now.z + dz[i] >= c || hash[now.x + dx[i]][now.y + dy[i]][now.z + dz[i]] || map[now.x + dx[i]][now.y + dy[i]][now.z + dz[i]] == 1) continue; Q.push(node (now.x + dx[i], now.y + dy[i], now.z + dz[i], now.time + 1)); hash[now.x + dx[i]][now.y + dy[i]][now.z + dz[i]]= true; } } printf("-1/n"); // 这里忘记了加 wrong } int main() { int t; scanf("%d", &t); while(t--) { scanf("%d %d %d %d", &a, &b, &c, &time); for(int i = 0; i < a; i++) for(int j = 0 ;j < b; j++) for(int k = 0; k < c; k++) scanf("%d", &map[i][j][k]); BFS(); } }