hdu 1253 ( 胜利大逃亡 )

http://acm.hdu.edu.cn/problemclass.php?id=268
View Code
Problem : 1253 ( 胜利大逃亡 ) Judge Status : Accepted

自我感觉BFS难度1可以告一段落了。
思路:
这题和一般的BFS的做法是一样的m[k][i][j]
=1表示第k块第i行第j列是墙,

#include
<iostream>
#include
<stdio.h>
#include
<queue>
#include
<algorithm>
using namespace std;
int m[51][51][51],vis[51][51][51];
int a,b,c,t,ans;
int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
struct node
{
int x,y,z,dis;
node(
int _x=0,int _y=0,int _z=0,int _dis=0):x(_x),y(_y),z(_z),dis(_dis){};
};

void BFS()
{
queue
<node> q;
q.push(node(
0,0,0,0));
vis[
0][0][0]=1;
ans
=-1;
while(!q.empty())
{
node tt
=q.front();
q.pop();
for(int k=0;k<6;k++)
{
int x=tt.x+dir[k][0];
int y=tt.y+dir[k][1];
int z=tt.z+dir[k][2];
if(x>=0&&x<a&&y>=0&&y<b&&z>=0&&z<c&&!vis[x][y][z]&&m[x][y][z]==0)
{
vis[x][y][z]
=1;
q.push(node(x,y,z,tt.dis
+1));
if(x==a-1&&y==b-1&&z==c-1)
{
if(tt.dis+1<=t)ans=tt.dis+1;
return;
}
}

}
}
}
int main()
{
int cas;
scanf(
"%d",&cas);
while(cas--)
{
memset(vis,
0,sizeof(vis));
memset(m,
0,sizeof(m));
scanf(
"%d%d%d%d",&a,&b,&c,&t);
for(int k=0;k<a;k++)
for(int i=0;i<b;i++)
for(int j=0;j<c;j++)
scanf(
"%d",&m[k][i][j]);
BFS();
printf(
"%d\n",ans);
}
}
原文地址:https://www.cnblogs.com/sook/p/1993080.html