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 |
![]() |
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 ...
随机推荐
- [Leetcode 44]通配符匹配Wildcard Matching
[题目] 匹配通配符*,?,DP动态规划,重点是*的两种情况 想象成两个S.P长度的字符串,P匹配S. S中不会出现通配符. [条件] (1)P=null,S=null,TRUE (2)P=null, ...
- 数学软件Matlab的使用感受
在我一年前的暑假,我们的小学期学习了MATLAB软件.MATLAB是一款数学软件,可以用于算法计算.数据可视化.数据分析以及数据计算. 我们主要学习了MATLAB关于数学上的经常用的一些用法和算法,M ...
- 完全卸载vs2013 2015
/uninstall /force 解压你的vs2013的安装包(iso格式). cd到解压后的文件夹 vs_ultimate.exe /uninstall /force 或者创建一个快捷方式到桌面 ...
- <Java><!!!><面试题>
装箱 & 拆箱 public class Test03 { public static void main(String[] args) { Integer f1 = 100, f2 = 10 ...
- leetcode第72题:编辑距离
给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输 ...
- C点滴成海------Ubuntu怎么运行C语言
Ubuntu怎么运行C语言 一.安装相关软件 安装vim:输入 sudo apt-get install vim: 安装gcc:输入 sudo apt-get install g++. 二.编写代码 ...
- FGX Native library功能介绍
Hot news from the fields of the cross-platform library "FGX Native" development. New Engli ...
- Go Storm Is Coming!
goland---http://idea.youbbs.org .................................................................... ...
- 面向对象+unittest+pytest
date:2018512+513 day07aft+day08mor 一.面向对象编程 1.定义类,类的继承 ps:与普通函数相比,在类中定义的函数第一个参数必须是类的本身实例变量self,在调用时, ...
- 启动apache 找不到 mbstring.dll
启动appserv时 提示 无法启动此程序 因为计算机中丢失php mbstring.dll 这种原因一般都是组件加载顺序引起的,在php.ini文件里确保 extension=php_mbstr ...