亡命逃窜

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
描述

从前有个叫hck的骑士,为了救我们美丽的公主,潜入魔王的老巢,够英雄吧。不过英雄不是这么好当的。这个可怜的娃被魔王抓住了,倍受折磨,生死一线。有一天魔王出去约会了,这可是一个千载难逢的逃命机会。你现在的任务就是判断一下这个英雄未遂的孩子能不能在魔王回来之前逃出魔王的城堡,成功逃生,最后迎娶我们美丽的公主。

魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始hck被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,hck每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出hck能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.

如图所示,输入数据中的第0块的最左上角是hck被关的地方,第A-1块的最右下角是城堡的出口。按照图中红色箭头方向移动每一层以构成整个城堡。

输入
输入数据的第一行是一个正整数K,表明测试数据的数量. 每组测试数据的第一行是四个正整数A,B,C和T(1<=A,B,C<=50,1<=T<=1000),它们分别代表城堡的大小和魔王回来的时间.
然后是A块输入数据(先是第0块,然后是第1块,第2块......),每块输入数据有B行,每行有C个正整数,代表迷宫的布局,其中0代表路,1代表墙.
(如果对输入描述不清楚,可以参考上面的迷宫描述,它表示的就是上图中的迷宫)

输出
对于每组测试数据,如果hck能够在魔王回来前离开城堡,那么请输出他最少需要多少分钟,否则输出-1.
样例输入
2
3 2 2 10
0 1
0 0
1 1
1 0
0 0
0 1
3 3 4 20
0 1 1 1
0 0 1 1
0 1 1 1
1 1 1 1
1 0 0 1
0 1 1 1
0 0 0 0
0 1 1 0
0 1 1 0
样例输出
-1
11
 #include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn=;
int map[maxn][maxn][maxn];
bool vis[maxn][maxn][maxn];
int dir[][]={{,,},{,,-},{,,},{,-,},{,,},{-,,}};//定义六个方向;
int a,b,c;// 宽,高,长;;
struct state
{
int x,y,z,step;
};
bool judge(state s)
{
if(!( s.x>a || s.x< || s.y>b || s.y< || s.z<||s.z>c)&&!vis[s.x][s.y][s.z] && map[s.x][s.y][s.z]== )
return ;//满足边界条件和满足可以继续走的条件,返回1
else return ;
}
queue<state>mm;
state now,eed;
int dfs(int x,int y,int z,int t)
{
memset(vis,,sizeof(vis));
while(!mm.empty()) mm.pop();
now.x=x;now.y=y;now.z=z;
now.step=t;
mm.push(now);
vis[now.x][now.y][now.z]=;
while(!mm.empty())
{
now=mm.front();mm.pop();
if(now.x==a && now.y==b && now.z==c)
{
return now.step;
}
for(int i=;i<;i++)
{ eed.x=now.x+dir[i][];eed.y=now.y+dir[i][];eed.z=now.z+dir[i][];
eed.step=now.step+;
if(judge(eed))
{
mm.push(eed);
vis[eed.x][eed.y][eed.z]=;
}
} }
return -;
}
int main()
{
int i,j,k,t,m,wall;
scanf("%d",&t);
while(t--)
{wall=;
scanf("%d %d %d %d",&a,&b,&c,&m);
for(i=;i<=a;i++)
for(j=;j<=b;j++)
for(k=;k<=c;k++)
{
scanf("%d",&map[i][j][k]);//用cin竟然超时了,换成scanf一下AC
if(map[i][j][k]==) wall++;
}
int g=dfs(,,,);
// cout<<"g="<<g<<endl;
if(g<=m && g>)
cout<<g<<endl;
else cout<<"-1"<<endl;
}
return ;
}

ny523 亡命逃串 hdoj 1253胜利大逃亡的更多相关文章

  1. hdoj 1253 胜利大逃亡

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. HDOJ 1253 胜利大逃亡(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 思路分析:因为问题需要寻找到达终点的最短的距离(最短的步数),即在状态转换图上需要找出层次最浅的 ...

  3. Hdoj 1253.胜利大逃亡 题解

    Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个B*C的矩 ...

  4. hdoj 1429 胜利大逃亡(续) 【BFS+状态压缩】

    题目:pid=1429">hdoj 1429 胜利大逃亡(续) 同样题目: 题意:中文的,自己看 分析:题目是求最少的逃亡时间.确定用BFS 这个题目的难点在于有几个锁对于几把钥匙.唯 ...

  5. hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. hdu 1253:胜利大逃亡(基础广搜BFS)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  7. HDU 1253 胜利大逃亡 NYOJ 523【BFS】

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. HDOJ 1429 胜利大逃亡(续)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. [ACM] hdu 1253 胜利大逃亡 (三维BFS)

    胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...

随机推荐

  1. IDEA开发web程序配置Tomcat

    1.下载zip版的Tomcat 7,并解压2.在IDEA中配置Tomcat 7 在idea中的Settings(Ctrl+Alt+s)(或者点击图标 ) 弹出窗口左上过滤栏中输入“Applicatio ...

  2. yml 配置文件注入

    配置文件 JavaBean 自动提示 测试

  3. Stage3d AGAL GPU处理照片 旧照片效果 sepia || pixelbender

    如果看不到下边的flash,请更新flash player到最新版本. 利用AGAL实现旧照片效果,大家可以对照一下之前一篇文章,关于图像处理(pixelbender).硬件处理肯定会更快,但这里无法 ...

  4. myeclipse debug不显示变量值解决的方法

    依次点击打开mycelipse菜单选项:"Window" - "Preferences" - "Java" - "Editor&q ...

  5. php-fpm 日志

    1.php-fpm 错误日志 #默认位置 安装目录下的 log/php-fpm.log error_log = log/php-fpm.log #错误级别 alert(必须立即处理), error(错 ...

  6. Java下Elasticsearh应用指南

    简介 本文针对在Java下操作elasticsearch给出应用示例,主要涉及创建连接,构建索引以及检索数据3个部分. 环境 1)elasticsearch2.4.4, 2)jdk1.8. 客户端连接 ...

  7. 微信小程序独家秘笈之抽奖大转盘

    代码地址如下:http://www.demodashi.com/demo/14209.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  8. 【微信小程序】 引用公共js里的方法

    一个小程序页面由四个文件组成,一个小程序页面的四个文件具有相同路径与文件名,由此我们可知一个小程序页面对应着一个跟页面同名的js文件.可是当有些公共方法,我们想抽离出来成为一个独立公共的js文件.我们 ...

  9. js replaceChild

    //父亲元素.replaceChild(新,旧) 1 <ul id="city"> <li id="bj">北京</li> ...

  10. JDK 生成数字证书

    JDK(keytool.exe)生成数字证书 2010-11-21 15:52 QUOTE: keytool JAVA是个密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数 ...