胜利大逃亡 HDU - 1253
魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.
Input输入数据的第一行是一个正整数K,表明测试数据的数量.每组测试数据的第一行是四个正整数A,B,C和T(1<=A,B,C<=50,1<=T<=1000),它们分别代表城堡的大小和魔王回来的时间.然后是A块输入数据(先是第0块,然后是第1块,第2块......),每块输入数据有B行,每行有C个正整数,代表迷宫的布局,其中0代表路,1代表墙.(如果对输入描述不清楚,可以参考Sample Input中的迷宫描述,它表示的就是上图中的迷宫)
特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
Output对于每组测试数据,如果Ignatius能够在魔王回来前离开城堡,那么请输出他最少需要多少分钟,否则输出-1.
Sample Input
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
Sample Output
11
思路:一看就知道是最短路径BFS
AC Code:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int INF=0x3f3f3f3f;
int K,A,B,C,T;
int maze[][][];
int vis[][][];
int dx[]={,-,,,,},dy[]={,,,-,,},dz[]={,,,,,-};
struct node{
int x;
int y;
int z;
};
bool judge(int x,int y,int z){
if(x>=&&x<A&&y>=&&y<B&&z>=&&z<C&&maze[x][y][z]!=&&vis[x][y][z]==INF)
return true;
return false;
}
void bfs(){
node t,temp;
queue<struct node> q;
t.x =t.y =t.z =;
vis[][][]=;
q.push(t);
while(!q.empty()){
t=q.front();q.pop();
if(t.x ==A-&&t.y==B-&&t.z==C-) break;
for(int i=;i<;i++){
int nx=t.x +dx[i],ny=t.y+dy[i],nz=t.z +dz[i];
if(judge(nx,ny,nz)){
temp.x =nx;temp.y =ny;temp.z =nz;
q.push(temp);
vis[nx][ny][nz]=vis[t.x ][t.y ][t.z ]+;
}
}
}
if(vis[A-][B-][C-]<=T) printf("%d\n",vis[A-][B-][C-]);
else printf("-1\n");
}
int main(){
scanf("%d",&K);
while(K--){
scanf("%d%d%d%d",&A,&B,&C,&T);
for(int i=;i<A;i++)
for(int j=;j<B;j++)
for(int k=;k<C;k++){
scanf("%d",&maze[i][j][k]);
vis[i][j][k]=INF;
}
bfs();
}
}
沉痛教训:
胜利大逃亡 HDU - 1253的更多相关文章
- 胜利大逃亡--hdu --1253(bfs)
Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C ...
- 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)
pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- 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 1429 胜利大逃亡(续)(bfs+状态压缩,很经典)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) ...
随机推荐
- 源码编译安装libtool工具
1. 获取源码 wget http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz tar xvf libtool-2.4.6.tar.gz -C ~ ...
- C Primer Plus 创建友好的输入界面 笔记
看代码 char inputFunCode; while(inputFunCode = getchar()){ '){ printf("you choose string conn\n&qu ...
- 【分片无法挂载】Elasticsearch分片和副本无法挂载(分片移位)
部署说明 硬件 服务器两台: 机器A:64G内存 机器B:32G内存 分片 共12个节点 2个查询节点,10个存储节点 8个主分片 1个复制分片(每个分片都有一个副本分布在不同的节点上面) 每台机器都 ...
- Centos 安装R
1 下载R源代码 原码下载地址https://cloud.r-project.org/https://cloud.r-project.org/src/base/R-3/R-3.4.2.tar.gz 2 ...
- oracle 之 伪列 rownum 和 rowid的用法与区别
rownum的用法 select rownum,empno,ename,job from emp where rownum<6 可以得到小于6的值数据 select rownum,empno, ...
- Chrome浏览器F12开发者工具的几个小技巧总结
1.直接修改页面元素 选择页面上元素,右键“检查”,会打开开发者工具窗口,显示当前选择元素的源代码,可以双击进行修改.如果要修改的东西比较多,可以折叠元素并单击选择,再右键Edit as HTML修改 ...
- E:Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
出现这个问题的原因可能是有另外一个程序正在运行,导致资源被锁不可用.而导致资源被锁的原因,可能是上次安装时没正常完成,而导致出现此状况. 解决方法:输入以下命令 sudo rm /var/cache/ ...
- ElasticSearch实战——.Net Core中的应用
dll引用: NLog.Targets.ElasticSearch,版本:4.0.0-beta26 Nlog,版本:4.5.0-rc04 Microsoft.Extensions.Configurat ...
- C+++string类如何判断字符串为空
string类是C++STL类之一,有很丰富的接口,判断string为空是经常用到的操作. string类为空,实际也就是元素为0个. 可以按照如下方式判断: 1.string类有自己的成员函数emp ...
- 【Python】【有趣的模块】【sys&time&os】
[模块] sys.path.append('C:/Users/wangxue1/PycharmProjects/selenium2TestOne') 然后就可以直接import 这个路径下的模块了 [ ...