三维地图(BFS)
亡命逃窜
- 描述
-
从前有个叫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
TLE code#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
int a,b,c,t;
int map[][][];
int Min=;
int dirx[]={,,,-},diry[]={,-,,},dirz[]={,-};
int dfs(int z,int x,int y,int step)
{
int i,j;
if(step>t||z<||z>=a||x<||x>=b||y<||y>=c)
return ;
if(map[z][x][y])
return ;
if(x==b-&&y==c-&&z==a-)
{
Min=min(Min,step);
return ;
}
else
{
step++;
map[z][x][y]=;
for(i=;i<;i++)
{
int xx=x+dirx[i],yy=y+diry[i];
dfs(z,xx,yy,step);
}
for(i=;i<;i++)
{
int zz=z+dirz[i];
dfs(zz,x,y,step);
}
map[z][x][y]=;
}
return ;
}
int main()
{
int k,i,j,p;
//freopen("in.txt","r",stdin);
cin>>k;
while(k--)
{
Min=;
cin>>a>>b>>c>>t;
for(i=;i<a;i++) //层
for(j=;j<b;j++)
for(p=;p<c;p++)
cin>>map[i][j][p];
dfs(,,,);
if(Min>t)
cout<<-<<endl;
else
cout<<Min<<endl;
}
}#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
int s1[][][],s2[][][],a,b,c,t,sum;
int go[ ][ ]={{- ,,},{,-,},{,,-},{,,},{,,},{,,}};
struct node
{
int x;
int y;
int z;
int time;
};
int BFS(int a,int b,int c)
{
int i;
queue <node> q;
node e,f;
e.time=e.x=e.y=e.z=;
q.push(e);
s2[][][]=;
while (!q.empty())
{
node d=q.front();
q.pop();
if(d.x==a-&&d.y==b-&&d.z==c-)
return d.time; for(i=;i<;i++)
{
f.x=d.x+go[i][];
f.y=d.y+go[i][];
f.z=d.z+go[i][];
f.time=d.time+;
if(f.x<||f.x>=a||f.y<||f.y>=b||f.z<||f.z>=c||s1[f.x][f.y][f.z]||s2[f.x][f.y][f.z])
continue;
q.push(f);
s2[f.x][f.y][f.z]=;
}
}
return -;
}
int main()
{
int l,i,j,k;
scanf("%d",&l);
while (l--)
{
scanf("%d%d%d%d",&a,&b,&c,&t);
for(i=;i<a;i++)
for(j=;j<b;j++)
for(k=;k<c;k++)
{
scanf("%d",&s1[i][j][k]);
s2[i][j][k]=;
}
sum=BFS(a,b,c);
if(sum<=t)
printf("%d\n",sum);
else
printf("-1\n");
}
}
三维地图(BFS)的更多相关文章
- poj 2251 三维地图最短路径问题 bfs算法
题意:给你一个三维地图,然后让你走出去,找到最短路径. 思路:bfs 每个坐标的表示为 x,y,z并且每个点都需要加上时间 t struct node{ int x, y, z; int t;}; b ...
- poj2251 三维简单BFS
D - (热身)简单宽搜回顾 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布
基于浏览器的三维地图还算是一个比较高冷的东西,最主要的技术难点是如何在浏览器上 多快好省 的显示三维数据,很遗憾,还真的没有太好的的方案,只能说还有可行的方案. 很久之前用过skyline,使用CS居 ...
- 使用ESMap的地图平台开发三维地图
本文简单的介绍使用ESmap的SDK开发(DIY自己地图的)一个地图的过程.若有不足,欢迎指正. 一.创建地图 只需四步,从无到有,在浏览器中创建一个自己的三维地图,炫酷到爆! 第一步:引入ESM ...
- 如何使用JS来开发室内三维地图的轨迹回放功能
在制作完成室内三维地图的功能后,最经常有的需求就是如何做人员的轨迹回放,一般流程都是从数据库中查询轨迹坐标后,经过后台查询接口返回给前端,接下来的事情都交给JS来完成. 如果想做好一个性能好的轨迹回 ...
- SkylineGlobe 7.0.1 & 7.0.2版本Web开发 如何正确使用三维地图控件和工程树控件
Skyline TerraExplorer Pro目前正式发布的7.0.1&7.0.2版本,还只是64位的版本, 在Web开发的时候,如何在页面中正确嵌入三维地图控件,让一些小伙伴凌乱了. 下 ...
- 【转载】Excel 三维地图入门
三维地图入门(office 2016) https://support.office.com/zh-cn/article/%E4%B8%89%E7%BB%B4%E5%9C%B0%E5%9B%BE%E5 ...
- SkylineGlobe 6.6 三维地图上实现自定义右键菜单示例代码
1.OnRButtonDown.htm <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- 如何屏蔽SkylineGlobe提供的三维地图控件上的快捷键
SkyllineGlobe提供的 <OBJECT ID=" TerraExplorer3DWindow" CLASSID="CLSID:3a4f9192-65a8- ...
- [GitHub开源]基于HTML5实现的轻量级Google Earth三维地图引擎,带你畅游世界 【转】
http://blog.csdn.net/iispring/article/details/52679185 WebGlobe HTML5基于原生WebGL实现的轻量级Google Earth三维地图 ...
随机推荐
- c#添加事物(全部执行和带保存点的执行)
全部执行 protected void Button2_Click(object sender, EventArgs e) { // 执行事务 SqlConnection con = new SqlC ...
- python作业day3修改配置文件
思维还有点乱,撸代码到深夜,先上代码吧.(我是跟着武sir的思路的) 流程图: 代码(有注释): #!/usr/bin/env python # -*- coding:utf-8 -*- import ...
- Asset Catalog Creator Free 生成程序内图标的软件
Asset Catalog Creator Free 生成程序内图标的软件
- “假如花千骨在杭州拍摄” 主题Cosplay
“假如花千骨在杭州拍摄” 主题Cosplay 今天,2015年7月23日,本周三:此刻,现场正在中国杭州西湖举办“花千骨cosplay”大型分享活动,现场有超凡而孤高,冰凉而淡漠 ,温润如玉又云淡风清 ...
- 微软在MSDN中更新了Win8.1批量授权版镜像(中文版更新完毕&版本说明)
微软在MSDN中更新了Win8.1大客户专业版和企业版镜像,零售版镜像(即专业版+核心版二合一镜像)没有更新,依然是9月份发布的版本.已证实,新的批量授权版镜像是集成了GA Rollup A更新,并且 ...
- 《Programming WPF》翻译 第3章 2.处理输入
原文:<Programming WPF>翻译 第3章 2.处理输入 在Windows应用程序中,又3种基本的用户输入形式:鼠标.键盘和手写板.同时,还有一种更高级输入方式,其可能来自快捷键 ...
- CentOS6.4/6.7下Mysql数据库的安装与配置(转载)
通过RPM方式 给centos 安装mysql 最好有光盘,呵呵,网络也可以下载rpm安装包,不过文件较大. 1 挂载光盘 mount /dev/cdrom /mnt/cdrom/mount: b ...
- 【转】Linux中history历史命令使用方法详解
原文网址:http://os.51cto.com/art/201205/335040.htm 当你在玩Linux的时候,如果你经常使用命令行来控制你的Linux系统,那么有效地使用命令历史机制将会使效 ...
- 删除list中指定值的元素
public class ListRemoveAll { public static void main(String[] args) { // TODO Auto-generated method ...
- EasyUI 两个日期比较
两个日期进行比较,后一个日期不能早于晚一个日期.需要自己去扩展validatebox的方法 1.对比2个密码是否相同 $.extend($.fn.validatebox.defaults.rules, ...