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

特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
题解:看起来很复杂,其实还是一个迷宫,因为问的是最少需要多少时间,所以用BFS。三维数组跟二维数组没有什么区别,只是dir数组开得有点不同。
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
//#define LOCAL
int mp[][][];
bool vis[][][];
int N,A,B,C,T;
struct node
{
node(int a,int b,int c,int d)
{x=a,y=b,z=c,time=d;}
int x,y,z;
int time;
};
int dir[][]={{,,},{-,,},{,,},{,,-},{,,},{,-,}};
bool check(int x,int y,int z)
{
if(x>=&&y>=&&z>=&&x<A&&y<B&&z<C&&mp[x][y][z]==)
return ;
return ;
}
int bfs(int t)
{
node st(,,,),ed(,,,);
queue<node>q;
while(!q.empty())q.pop();
memset(vis,,sizeof vis);
vis[][][]=;
q.push(st);
while(!q.empty())
{
st=q.front();
q.pop();
if(st.time>t)return -;
if(st.x==A-&&st.y==B-&&st.z==C-&&st.time<=T)return st.time;
for(int i=;i<;i++)
{
ed.x=st.x+dir[i][];
ed.y=st.y+dir[i][];
ed.z=st.z+dir[i][];
if(check(ed.x,ed.y,ed.z)&&!vis[ed.x][ed.y][ed.z])
{
vis[ed.x][ed.y][ed.z]=true;
ed.time=st.time+;
if(abs(ed.x-A+)+abs(ed.y-B+)+abs(ed.z-C+)+ed.time>T)continue;
q.push(ed);
}
}
}
return -;
}
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
//Start
scanf("%d",&N);
while(N--)
{
scanf("%d%d%d%d",&A,&B,&C,&T);
memset(mp,,sizeof mp);
for(int i=; i<A; i++)
for(int j=; j<B; j++)
for(int k=; k<C; k++)
scanf("%d",&mp[i][j][k]);
printf("%d\n",bfs(T));
}
return ;
}
HDU 1253 胜利大逃亡(BFS)的更多相关文章
- hdu - 1240 Nightmare && hdu - 1253 胜利大逃亡(bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1240 开始没仔细看题,看懂了发现就是一个裸的bfs,注意坐标是三维的,然后每次可以扩展出6个方向. 第一维代表在 ...
- hdu 1253:胜利大逃亡(基础广搜BFS)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1253 胜利大逃亡 NYOJ 523【BFS】
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hdu 1253 胜利大逃亡 (三维简单bfs+剪枝)
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- [ACM] hdu 1253 胜利大逃亡 (三维BFS)
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,能够被表示 ...
- hdu 1253 胜利大逃亡 (代码详解)解题报告
胜利大逃亡 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示 ...
- HDU 1253 胜利大逃亡 题解
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- HDU 1253 胜利大逃亡(三维BFS)
点我看题目 题意 : 中文题不详述. 思路 :因为还牵扯到层的问题,所以用三维的解决,不过这个还是很简单的BFS,六个方向搜一下就可以了,一开始交的时候老是超时,怎么改都不对,后来看了一个人写的博客, ...
- hdu 1253 胜利大逃亡(BFS)
题目链接:点击链接 三维的BFS,刚开始一直超内存,超无语...... 改了n多次终于AC了 #include <iostream> #include <stdio.h> # ...
随机推荐
- java 基本数据类型跟封装类型的差距
import java.util.*; class test1{ public static void main(String[] args){ long start1 = System.curren ...
- 谷歌游览器对<input type='file'> change只能响应1次解决和样式的改变
在项目过程中遇到的需要上传本地文件,file的原始控件不太美观,但是这个控件和button有点不太一样, 改变这个样式的思路就是在控件外面套一层链接,然后把file控件的透明度设置为0(透明).样式只 ...
- 【IE6的疯狂之十二】一个display:none引起的3像素的BUG
今天同事给我看了一个display:none引起的3像素的BUG,非常奇怪!从来没碰到过display:none还能引起这种bug. 看代码: <div style="width: ...
- ora2pg数据迁移
1.安装strawberry-perl-5.242.安装ora2pg-17.4 #perl Makefile.PL #dmake && dmake install3.安装ora2pg相 ...
- Objective-C Runtime 运行时之一:类与对象(转载)
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- android弹出dialog后,activity得到焦点
1.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,WindowManager.LayoutParams.FLAG ...
- 页面导入样式时,使用link和@import有什么区别?
1 link属于XHTML标签,而@import是CSS提供的: 2 页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载: 3 import只有在IE5以上才能 ...
- F4IF_FIELD_VALUE_REQUEST 和 F4IF_INT_TABLE_VALUE_REQUEST的不同
F4IF_FIELD_VALUE_REQUEST 和 F4IF_INT_TABLE_VALUE_REQUEST的不同 F4IF_FIELD_VALUE_REQUEST主要功能是将表里的字段对应的sea ...
- iPhone doesn’t support any of GongShangJ.app’s architectures. You can add iPhone’s armv7s architectu
iPhone doesn't support any of GongShangJ.app's architectures. You can add iPhone's armv7s architectu
- Multi-Objective Data Placement for Multi-Cloud Socially Aware Services---INFOCOM 2014
[标题] [作者] [来源] [对本文评价] [why] 存在的问题 [how] [不足] assumption in future work [相关方法或论文] [重点提示] [其它]