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 -
来源
0.0本来想水一道题的,但是优先队列一直不过,一般的队列倒是过了 0.0||
#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
int map[60][60][60],vis[60][60][60];
int T,a,b,c;
int dx[6]={0,0,1,-1,0,0};
int dy[6]={1,-1,0,0,0,0};
int dz[6]={0,0,0,0,1,-1};
struct node
{
int x,y,z;
int step;
}p,temp;
bool judge(node s)
{
if(s.x<0||s.x>=a||s.y<0||s.y>=b||s.z<0||s.z>=c)
return true;
if(vis[s.x][s.y][s.z]||map[s.x][s.y][s.z])
return true;
return false;
}
void BFS()
{
queue<node>q;
memset(vis,0,sizeof(vis));
p.x=p.y=p.z=p.step=0;
vis[0][0][0]=1;
q.push(p);
int ans=0x3f3f3f3f;
while(!q.empty())
{
p=q.front();
q.pop();
if(p.x==a-1&&p.y==b-1&&p.z==c-1&&p.step<=T)
ans=min(ans,p.step);
for(int i=0;i<6;i++)
{
temp.x=p.x+dx[i];
temp.y=p.y+dy[i];
temp.z=p.z+dz[i];
if(judge(temp)) continue;
temp.step=p.step+1;
vis[temp.x][temp.y][temp.z]=1;
q.push(temp);
}
}
if(ans<=T)
printf("%d\n",ans);
else
printf("-1\n");
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(map,0,sizeof(map));
scanf("%d%d%d%d",&a,&b,&c,&T);
for(int i=0;i<a;i++)
for(int j=0;j<b;j++)
for(int k=0;k<c;k++)
scanf("%d",&map[i][j][k]);
BFS();
}
return 0;
}
nyoj--523--亡命逃窜(BFS水题)的更多相关文章
- nyoj 523 亡命逃窜 【BFS】
亡命逃窜 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 从前有个叫hck的骑士,为了救我们漂亮的公主,潜入魔王的老巢,够英雄吧.只是英雄不是这么好当的.这个可怜的娃 ...
- POJ 3984 - 迷宫问题 - [BFS水题]
题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...
- hdu1240 bfs 水题
原题链接 思路:水题,直接搜 #include "map" #include "queue" #include "math.h" #incl ...
- POJ1426:Find The Multiple(算是bfs水题吧,投机取巧过的)
http://poj.org/problem?id=1426 Description Given a positive integer n, write a program to find out a ...
- POJ3287(BFS水题)
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- POJ 3126 Prime Path bfs, 水题 难度:0
题目 http://poj.org/problem?id=3126 题意 多组数据,每组数据有一个起点四位数s, 要变为终点四位数e, 此处s和e都是大于1000的质数,现在要找一个最短的路径把s变为 ...
- codeforces 811 D. Vladik and Favorite Game(bfs水题)
题目链接:http://codeforces.com/contest/811/problem/D 题意:现在给你一个n*m大小的图,你输出一个方向之后,系统反馈给你一个坐标,表示走完这步之后到的位子, ...
- nyoj 1208——水题系列——————【dp】
水题系列 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 给你一个有向图,每条边都有一定的权值,现在让你从图中的任意一点出发,每次走的边的权值必须必上一次的权 ...
- CYJian的水题大赛
实在没忍住就去打比赛了然后一耗就是一天 最后Rank19还是挺好的(要不是乐多赛不然炸飞),这是唯一一套在Luogu上号称水题大赛的而实际上真的是水题大赛的比赛 好了我们开始看题 T1 八百标兵奔北坡 ...
随机推荐
- shiro英语
Security Manager安全管理人员 Tutorial 辅导的 transient 短暂的 Cipher 密码 Memory 记忆 Access 访问Handy Hint 方便提示separa ...
- javascript中执行环境和作用域(js高程)
执行环境(execution context,为简单起见,有时也成为“环境”)是javascript中最为重要的一个概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境 ...
- 使用File类操作文件或目录的属性
在学I/O流之前,我先总结一下使用File类操作文件或目录的属性. package com.File; import java.io.File; import java.io.IOException; ...
- Mysql 之实现多字段模糊查询
在一个table中有省,市,县,期,栋,单元,室几个字段,然后用户输入一个地址从表中的字段拼接起来进行模糊查询. 解决办法: <MySQL权威指南>中CONCAT的使用方法,在书中的对CO ...
- wx小程序开发 1:小程序代码构成
官网学习地址:https://developers.weixin.qq.com/miniprogram/dev/quickstart/basic/introduction.html 1: 2:待续.. ...
- spring cloud(五) hystrix
开启feign 熔断 hystrix 整合hystrix-dashboard监控面板 1. 服务调用者boot工程 pom引入依赖 <!-- hystrix-dashboard 监控依赖 ...
- vue 登录验证码
vue 登录验证码 最近在开发pc端项目,配合elementui使用 createCode() { var code = ""; var codeLength = 4; //验证码 ...
- [luogu2679] 子串 (多维dp)
传送门 Description 有两个仅包含小写英文字母的字符串 A 和 B . 现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来 ...
- react 点击事件+父子传值
接下来要做的效果是,在父组件添加两个按钮,点击后改变父组件传过去的值 父组件 import React, { Component } from 'react'; import Test from '. ...
- Docker与K8s
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Li ...