添加链接描述
#include<bits/stdc++.h>
using namespace std;
int a,b,c,t;
int vis[55][55][55];
int step[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
struct pos{
int x,y,z;
int time;
};
int ti;
void bfs(int x,int y,int z){
pos s,q;
queue<pos> qu;
int e;
vis[x][y][z]=1;
s.x =x;
s.y =y;
s.z =z;
s.time =0;
if(s.x ==a-1&&s.y ==b-1&&s.z ==c-1&&s.time <=t){
ti=s.time ;
return;
}
qu.push(s);
while(!qu.empty()){
q=qu.front();
qu.pop();
for(e=0;e<6;e++){
if(step[e][0]+q.x >=0&&step[e][0]+q.x <a&&step[e][1]+q.y >=0&&step[e][1]+q.y <b&&step[e][2]+q.z >=0&&step[e][2]+q.z <c){
if(vis[step[e][0]+q.x ][step[e][1]+q.y ][step[e][2]+q.z ]==0&&q.time +1<=t){
if(step[e][0]+q.x ==a-1&&step[e][1]+q.y ==b-1&&step[e][2]+q.z ==c-1){
ti=q.time +1;
return;
}
s.x =step[e][0]+q.x ;
s.y =step[e][1]+q.y ;
s.z =step[e][2]+q.z ;
s.time =q.time +1;
if(a-s.x +b-s.y +c-s.z -3>t-s.time ){
vis[s.x ][s.y ][s.z ]=1;
continue;
}
vis[s.x ][s.y ][s.z ]=1;
qu.push(s);
}
}
}
}
}
int main()
{
int k;
scanf("%d",&k);
while(k--){
scanf("%d%d%d%d",&a,&b,&c,&t);
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
for(int k=0;k<c;k++){
scanf("%d",&vis[i][j][k]);
}
}
}
if(a+b+c-3>t||vis[a-1][b-1][c-1]==1)
{
printf("-1\n");
continue;
}
ti=-1;
bfs(0,0,0);
printf("%d\n",ti);
}
return 0;
}