NYOJ 483 Nightmare 【广搜】+【无标记】
版权声明:长风原创 https://blog.csdn.net/u012846486/article/details/31032479
Nightmare
- 描写叙述
-
Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on him. The labyrinth has an exit, Ignatius should get out of the labyrinth before the bomb explodes. The initial exploding time of the bomb is
set to 6 minutes. To prevent the bomb from exploding by shake, Ignatius had to move slowly, that is to move from one area to the nearest area(that is, if Ignatius stands on (x,y) now, he could only on (x+1,y), (x-1,y), (x,y+1), or (x,y-1) in the next minute)
takes him 1 minute. Some area in the labyrinth contains a Bomb-Reset-Equipment. They could reset the exploding time to 6 minutes.Given the layout of the labyrinth and Ignatius' start position, please tell Ignatius whether he could get out of the labyrinth, if he could, output the minimum time that he has to use to find the exit of the labyrinth, else output -1.
Here are some rules:
1. We can assume the labyrinth is a 2 array.
2. Each minute, Ignatius could only get to one of the nearest area, and he should not walk out of the border, of course he could not walk on a wall, too.
3. If Ignatius get to the exit when the exploding time turns to 0, he can't get out of the labyrinth.
4. If Ignatius get to the area which contains Bomb-Rest-Equipment when the exploding time turns to 0, he can't use the equipment to reset the bomb.
5. A Bomb-Reset-Equipment can be used as many times as you wish, if it is needed, Ignatius can get to any areas in the labyrinth as many times as you wish.
6. The time to reset the exploding time can be ignore, in other words, if Ignatius get to an area which contain Bomb-Rest-Equipment, and the exploding time is larger than 0, the exploding time would be reset to 6.- 输入
- The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case starts with two integers N and M(1<=N,Mm=8) which indicate the size of the labyrinth. Then N lines follow, each line contains M integers. The array indicates the layout of the labyrinth.
There are five integers which indicate the different type of area in the labyrinth:
0: The area is a wall, Ignatius should not walk on it.
1: The area contains nothing, Ignatius can walk on it.
2: Ignatius' start position, Ignatius starts his escape from this position.
3: The exit of the labyrinth, Ignatius' target position.
4: The area contains a Bomb-Reset-Equipment, Ignatius can delay the exploding time by walking to these areas. - 输出
- For each test case, if Ignatius can get out of the labyrinth, you should output the minimum time he needs, else you should just output -1.
- 例子输入
-
2
3 3
2 1 1
1 1 0
1 1 3
4 8
2 1 1 0 1 1 1 0
1 0 4 1 1 0 4 1
1 0 0 0 0 0 0 1
1 1 1 4 1 1 1 3 - 例子输出
-
4
-1
| 896378 | 长木 | pid=483" rel="nofollow" style="text-decoration:none;color:rgb(55,119,188);">Nightmare |
Accepted |
4 | 308 | C/C++ | 06-15 21:03:39 |
| 长木 | Nightmare | WrongAnswer | -- | -- | C/C++ | 06-15 20:54:57 | |
userid=%E9%95%BF%E6%9C%A8" rel="nofollow" style="text-decoration:none;color:rgb(55,119,188);">长木 |
Nightmare | WrongAnswer | -- | -- | C/C++ | 06-15 20:49:37 | |
| 长木 | Nightmare | runid=896360" rel="nofollow" style="text-decoration:none;color:rgb(55,119,188);">WrongAnswer |
-- | -- | C/C++ | 06-15 20:46:04 | |
userid=%E9%95%BF%E6%9C%A8" rel="nofollow" style="text-decoration:none;color:rgb(55,119,188);">长木 |
Nightmare | runid=896339" rel="nofollow" style="text-decoration:none;color:rgb(55,119,188);">WrongAnswer |
-- | -- | C/C++ | 06-15 20:14:06 | |
|
runid=896333"> |
长木 | pid=483" rel="nofollow" style="text-decoration:none;color:rgb(55,119,188);">Nightmare |
runid=896333" rel="nofollow" style="text-decoration:none;color:rgb(55,119,188);">WrongAnswer |
-- | -- | C/C++ | 06-15 20:02:33 |
| 长木 | Nightmare | WrongAnswer | -- | -- | C/C++ | 06-15 19:06:14 |
说多泪啊(┬_┬),之前几次WA都是数组模拟队列时结果错用成了栈。。
AC:
#include <stdio.h>
#include <queue>
using std::queue;
int map[10][10], t, m, n, id;
int mov[][2] = {1, 0, -1, 0, 0, 1, 0, -1};
struct Node{
int x, y, steps, time;
} start;
queue<Node> Q;
int check(int i, int j){
if(i < 0 || j < 0 || i >= m || j >= n)
return 0;
return map[i][j];
}
int BFS(){
Node now, temp;
while(!Q.empty()){
now = Q.front();
Q.pop();
if(now.time == 1) continue; //cut
for(int i = 0; i < 4; ++i){
temp = now;
temp.x += mov[i][0];
temp.y += mov[i][1];
--temp.time; ++temp.steps;
if(check(temp.x, temp.y)){
if(map[temp.x][temp.y] == 3) return temp.steps;
else if(map[temp.x][temp.y] == 4){ //防止无限次充电
map[temp.x][temp.y] = 1;
temp.time = 6;
}
Q.push(temp);
}
}
}
return -1;
}
int main(){
scanf("%d", &t);
while(t--){
scanf("%d%d", &m, &n);
start.steps = 0;
start.time = 6;
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j){
scanf("%d", &map[i][j]);
if(map[i][j] == 2){
start.x = i; start.y = j;
}
}
while(!Q.empty()) Q.pop();
Q.push(start);
printf("%d\n", BFS());
}
return 0;
}
WA:
#include <stdio.h>
int map[10][10], t, m, n, id;
int mov[][2] = {-1, 0, 0, 1, 1, 0, 0, -1};
struct Node{
int x, y, steps, time;
} Q[70], start;
int check(int i, int j){
if(i < 0 || j < 0 || i >= m || j >= n)
return 0;
return map[i][j];
}
int BFS(){
Node now, temp;
while(id){
now = Q[--id]; //这哪是出队啊。⊙﹏⊙b汗
if(map[now.x][now.y] == 3) return now.steps;
if(now.time == 1) continue; //cut
for(int i = 0; i < 4; ++i){
temp = now;
temp.x += mov[i][0];
temp.y += mov[i][1];
--temp.time; ++temp.steps;
if(check(temp.x, temp.y)){
if(map[temp.x][temp.y] == 4){ //防止无限次充电
map[temp.x][temp.y] = 1; //不能赋值为0,否则可能无限循环
temp.time = 6;
}
Q[id++] = temp;
}
}
}
return -1;
}
int main(){
scanf("%d", &t);
while(t--){
scanf("%d%d", &m, &n);
start.steps = id = 0;
start.time = 6;
for(int i = 0; i < m; ++i)
for(int j = 0; j < n; ++j){
scanf("%d", &map[i][j]);
if(map[i][j] == 2){
start.x = i; start.y = j;
}
}
Q[id++] = start;
printf("%d\n", BFS());
}
return 0;
}
NYOJ 483 Nightmare 【广搜】+【无标记】的更多相关文章
- 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 ...
- HDU 1072 Nightmare (广搜)
题目链接 Problem Description Ignatius had a nightmare last night. He found himself in a labyrinth with a ...
- Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分
题意: 第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值.下面M行是从a点到b点的距离. 建图: 题上说从两点之间可以有多条边,问的是从1~N ...
- 广搜 poj3278 poj1426 poj3126
Catch That Cow Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Ja ...
- nyoj 613 免费馅饼 广搜
免费馅饼 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...
- nyoj 592 spiral grid(广搜)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=592 解决以下问题后就方便用广搜解: 1.将数字坐标化,10000坐标为(0,0),这样就 ...
- nyoj 999——师傅又被妖怪抓走了——————【双广搜】
师傅又被妖怪抓走了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 话说唐僧复得了孙行者,师徒们一心同体,共诣西方.自宝象国救了公主,承君臣送出城西,沿路饥餐渴饮,悟 ...
- TOJ 2778 数据结构练习题――分油问题(广搜和哈希)
描述 设有大小不等的三个无刻度的油桶,分别能盛满x,y,z公升油.初始时,第一个油桶盛满油,第二.三个油桶为空,在某一个油桶上分出targ公升油. 输入 输入包含多组测试数据.每组数据包含一行.分别x ...
随机推荐
- python常见面试题(mark)
1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in file 2.迭代器和生成器的区别 1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方 ...
- 关于Java的接口
其实刚开始听到接口的时候不解其意,为什么要有接口这个东西,加之老师上课我可能没仔细听(或者时间长了忘了?),这次看到了“用接口设计并实现圆,三角形,矩形的面积与周长计算”这个题目的代码,它将接口定义在 ...
- Android开发---基本UI组件1:自动拨电话,自动上网,输入框不换行、只输数字、只输文本、只输密码
1.activity_main.xml 描述:构建一个按钮 <?xml version="1.0" encoding="utf-8"?> <L ...
- SharePoint Framework 企业向导(十)
博客地址:http://blog.csdn.net/FoxDave 接上一讲 SharePoint Framework部署范围 对于SharePoint Framework解决方案,只有一个部署范围: ...
- mysql encode decode加密和解密
加密:模板:insert into user(userpass) values(encode('useerpass','str')) insert into user(userid,username, ...
- python 常用的高阶函数
前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...
- python 26个技巧
26个你不知道的Python技巧 Python是目前世界上最流行的编程语言之一.因为: 1.它容易学习 2.它用途超广 3.它有非常多的开源支持(大量的模块和库) 不好意思,优达菌又啰嗦了. 本文 ...
- [LeetCode&Python] Problem 762. Prime Number of Set Bits in Binary Representation
Given two integers L and R, find the count of numbers in the range [L, R](inclusive) having a prime ...
- Gym-101653:acific Northwest Regional Contest (2019训练第一场)
本套题没有什么数据结构题,图论题,唯一有价值的就是Q题博弈,在最后面,读者可以直接拉到最下面. (还剩下两个,估计每什么价值的题,懒得补了 M .Polyhedra pro:欧拉公式,V-E+F=2: ...
- java关键字详解----static
Java Static关键字详解 提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... ...
Accepted