/*三维空间的BFS ,下面的程序只能勉强不超时。- -!*/
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<queue>
using namespace std;
#define N 55
int mp[N][N][N];
int dir[6][3]={{0,0,1},{0,0,-1},{1,0,0},{0,1,0},{-1,0,0},{0,-1,0}};
int a,b,c,t;
struct Node
{
int i,j,k,step;
};
int bfs()
{
queue<Node>q;
Node tmp,p;
p.i = 0,p.j = 0,p.k = 0,p.step = 0;
mp[0][0][0] = 1;
q.push(p);
int di;
while(!q.empty())
{
p = q.front();
q.pop();
for(di=0;di<6;di++)
{
tmp.i = p.i + dir[di][0], tmp.j = p.j + dir[di][1], tmp.k = p.k + dir[di][2];
tmp.step = p.step+1;
if (tmp.i>=0 && tmp.j>=0 && tmp.k>=0
&& tmp.i<a && tmp.j<b && tmp.k<c && !mp[tmp.i][tmp.j][tmp.k] && tmp.step<=t)
{
if (tmp.i==a-1 && tmp.j==b-1 && tmp.k==c-1)
return tmp.step;
q.push(tmp);
mp[tmp.i][tmp.j][tmp.k] = 1;
}
}
}
return -1;
}
int main()
{
int Case,cnt,i,j,k;
scanf("%d",&Case);
while(Case--)
{
scanf("%d%d%d%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",&mp[i][j][k]);
cnt = bfs();
if (cnt!=-1 && cnt<=t)
printf("%d\n",cnt);
else printf("-1\n");
}
return 0;
}
HDU-1253:胜利大逃亡
最新推荐文章于 2018-10-17 17:53:25 发布