#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<queue>
using namespace std;
const int inf=1<<30;
struct p
{
int x,y,z;
};
int a,b,c,T,dx[]={-1,1,0,0,0,0},dy[]={0,0,-1,1,0,0},dz[]={0,0,0,0,-1,1},vis[55][55][55],ans[55][55][55],k[55][55][55];
void bfs()
{
int i;
queue<p> q;
p pp;
ans[0][0][0]=0;
pp.x=0;
pp.y=0;
pp.z=0;
q.push(pp);
while(!q.empty())
{
pp=q.front();
q.pop();
for(i=0;i<6;i++)
{
p np;
np.x=pp.x+dx[i];
np.y=pp.y+dy[i];
np.z=pp.z+dz[i];
if(np.x>=0&&np.x<a&&np.y>=0&&np.y<b&&np.z>=0&&np.z<c&&!vis[np.x][np.y][np.z]&&!k[np.x][np.y][np.z])
{
vis[np.x][np.y][np.z]=1;
if(ans[pp.x][pp.y][pp.z]<T)
{
ans[np.x][np.y][np.z]=ans[pp.x][pp.y][pp.z]+1;
q.push(np);
}
}
}
}
}
int main()
{
int t,i,j,l;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&a,&b,&c,&T);
for(i=0;i<a;i++)
for(j=0;j<b;j++)
for(l=0;l<c;l++)
scanf("%d",&k[i][j][l]);
memset(ans,-1,sizeof(ans));
memset(vis,0,sizeof(vis));
bfs();
if(ans[a-1][b-1][c-1]>T||ans[a-1][b-1][c-1]==-1)
printf("-1\n");
else
printf("%d\n",ans[a-1][b-1][c-1]);
}
return 0;
}
HDU 1253 胜利大逃亡
最新推荐文章于 2019-04-11 19:28:20 发布