nyoj 523 亡命逃窜 【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
简单的3维广搜
代码:
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;
#define M 55 struct node{
int x, y, z;
int step;
};
node st, en;
int map[M][M][M];
bool vis[M][M][M];
int a, b, c, t;
const int dx[] = {0, 0, 0, 0, 1, -1};
const int dy[] = {0, 0, 1, -1, 0, 0};
const int dz[] = {1, -1, 0, 0, 0, 0}; int limit(node s){
return (s.x>=0&&s.x<a&&s.y>=0&&s.y<b&&s.z>=0&&s.z<c&&map[s.x][s.y][s.z] == 0);
} int match(node a, node b){
return (a.x==b.x&&a.y==b.y&&a.z==b.z);
} int bfs(){
queue<node> q;
int i, res = 0x3f3f3f3f;
vis[0][0][0] = 1;
q.push(st);
while(!q.empty()){
node cur = q.front();
q.pop();
for(i = 0; i < 6; i ++){
node temp = cur;
temp.x += dx[i]; temp.y+=dy[i]; temp.z += dz[i];
temp.step++;
if(match(temp, en)){
res = min(res, temp.step);
continue;
}
if(limit(temp)&&!vis[temp.x][temp.y][temp.z]){
q.push(temp);
vis[temp.x][temp.y][temp.z] = 1;
}
}
}
if(res > t) return -1;
return res;
} int main(){
int T;
scanf("%d", &T);
while(T --){
scanf("%d%d%d%d", &a, &b, &c, &t);
memset(vis, 0, sizeof(vis));
memset(map, -1, sizeof(map));
st.x = st.y = st.z = st.step = 0;
en.x = a-1, en.y = b-1, en.z = c-1;
int i, j, k;
for(i = 0; i < a; i ++)
for(j = 0; j < b; j ++)
for(k = 0; k < c; k ++)
scanf("%d", &map[i][j][k]);
if(match(st, en)){
printf("0\n"); continue;
}
if(map[a-1][b-1][c-1] == 1){
printf("-1\n"); continue;
}
int ans = bfs();
printf("%d\n", ans);
}
return 0;
}
nyoj 523 亡命逃窜 【BFS】的更多相关文章
- HDU 1253 胜利大逃亡 NYOJ 523【BFS】
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- nyoj 523 双向广搜
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=523 #include<iostream> #include<cstd ...
- nyoj 483 Nightmare【bfs+优先队列】
Nightmare 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Ignatius had a nightmare last night. He found him ...
- NYOJ 284 坦克大战 bfs + 优先队列
这类带权的边的图,直接广搜不行,要加上优先队列,这样得到的结果才是最优的,这样每次先找权值最小的,代码如下 #include <stdio.h> #include <iostream ...
- nyoj三个水杯(bfs)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互 ...
- 3Ddungeon-------三维搜索-----偷个懒 把 亡命逃窜 的代码修改了一下 拿来用了
题 很简单 就是给一个 三维的迷宫然后 开你起始地点 S 问你能不能到达 出口 E 能的话 需要多长时间 ? #include<stdio.h> #include<string ...
- nyoj 27-水池数目(BFS, DFS)
27-水池数目 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:17 submit:22 题目描述: 南阳理工学院校园里有一些小河和一些湖泊,现在,我 ...
- nyoj 21-三个水杯(BFS)
21-三个水杯 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:7 submit:18 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装 ...
- nyoj 58-最少步数 (BFS)
58-最少步数 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:17 submit:22 题目描述: 这有一个迷宫,有0~8行和0~8列: 1,1,1 ...
随机推荐
- 2、elasticsearch 的安装和插件的安装
1.安装Elasticsearch集群 1.下载elasticsearch-2.0.0.tar.gz,执行tar -zxvf elasticsearch-2.0.0.tar.gz解压 2.修改conf ...
- execute immediate的简单用法(oracle)
直接上示例代码: create or replace procedure proc_test( --参数区域 ) is --变量区域 --sql脚本 v_sql ) :=''; --记录学生数量 v_ ...
- STL 整理(map、set、vector、list、stack、queue、deque、priority_queue)(转)
向量(vector) <vector> 连续存储的元素<vector> Vector<int>c; c.back() 传回最后一个数据,不检查这个数据是否存在 ...
- 多媒体封装格式----mkv
Matroska 开源多媒体容器标准.MKV属于其中的一部分.Matroska常见的有.MKV视频格式.MKA音频格式..MKS字幕格式..MK3D files (stereoscopic/3D vi ...
- 学习asp.net Identity 心得体会(连接oracle)
asp.net Identity具体功能暂不在此细说,下面主要介绍几点连接oracle注意的事项, 1.首先下载连接oracle驱动Oracle.ManagedDataAccess.dll和Oracl ...
- 2014年1月9日 Oracle 内存与结构
Oracle启动时为启动一个实例 主要为 实例 SVG 数据库文件 其它文件 1.Oracle: 内存 进程 其他文件 1.1 SVG内存(Cache) 1.1.1 共享池(Shared Poo ...
- c#中的数据类型简介(委托)
c#中的数据类型简介(委托) 什么是委托? 委托是一种类型,它封装了一类方法,这些方法具有相同的方法签名(signature).定义听起来有点拗口,首先可以确定委托是一种数据类型,那么什么是方法签名, ...
- [Effective Modern C++] Item 3. Understand decltype - 了解decltype
条款三 了解decltype 基础知识 提供一个变量或者表达式,decltype会返回其类型,但是返回的内容会使人感到奇怪. 以下是一些简单的推断类型: ; // decltype(i) -> ...
- HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境
HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服 ...
- activiti 部署在oracle多用户下不能自动建表问题的解决!
在activiti配置文件中的SpringProcessEngineConfiguration的配置项中添加<property name= "databaseSchema" ...