Finding Nemo










Time Limit: 2000MS   Memory Limit: 30000K
Total Submissions: 7376   Accepted: 1717

Description

Nemo is a naughty boy. One day he went into the
deep sea all by himself. Unfortunately, he became lost and couldn‘t find his way
home. Therefore, he sent a signal to his father, Marlin, to ask for help.

After checking the map, Marlin found that the sea is like a labyrinth with
walls and doors. All the walls are parallel to the X-axis or to the Y-axis. The
thickness of the walls are assumed to be zero.
All the doors are opened on
the walls and have a length of 1. Marlin cannot go through a wall unless there
is a door on the wall. Because going through a door is dangerous (there may be
some virulent medusas near the doors), Marlin wants to go through as few doors
as he could to find Nemo.
Figure-1 shows an example of the labyrinth and the
path Marlin went through to find Nemo.


We
assume Marlin‘s initial position is at (0, 0). Given the position of Nemo and
the configuration of walls and doors, please write a program to calculate the
minimum number of doors Marlin has to go through in order to reach Nemo.

Input

The input consists of several test cases. Each
test case is started by two non-negative integers M and N. M represents the
number of walls in the labyrinth and N represents the number of doors.
Then
follow M lines, each containing four integers that describe a wall in the
following format:
x y d t
(x, y) indicates the lower-left point of the
wall, d is the direction of the wall -- 0 means it‘s parallel to the X-axis and
1 means that it‘s parallel to the Y-axis, and t gives the length of the wall.

The coordinates of two ends of any wall will be in the range of [1,199].

Then there are N lines that give the description of the doors:
x y d

x, y, d have the same meaning as the walls. As the doors have fixed length
of 1, t is omitted.
The last line of each case contains two positive float
numbers:
f1 f2
(f1, f2) gives the position of Nemo. And it will not lie
within any wall or door.
A test case of M = -1 and N = -1 indicates the end
of input, and should not be processed.

Output

For each test case, in a separate line, please
output the minimum number of doors Marlin has to go through in order to rescue
his son. If he can‘t reach Nemo, output -1.

Sample Input

8 9
1 1 1 3
2 1 1 3
3 1 1 3
4 1 1 3
1 1 0 3
1 2 0 3
1 3 0 3
1 4 0 3
2 1 1
2 2 1
2 3 1
3 1 1
3 2 1
3 3 1
1 2 0
3 3 0
4 3 1
1.5 1.5
4 0
1 1 0 1
1 1 1 1
2 1 1 1
1 2 0 1
1.5 1.7
-1 -1

Sample Output

5
-1

Source

时间: 2024-08-05 23:37:26

Finding Nemo的相关文章

POJ 2049 Finding Nemo 优先队列 STL

题目链接:http://poj.org/problem?id=2049 题目利用了<海底总动员>的情节,小丑鱼尼莫迷路了,他老爸去营救他便是题意. 题目给出了这样的地图,说是假设地图由墙和门组成,忽略墙的厚度,地图上有门,没有墙的地方是可以自由行动的问可以经过最少多少道门便可以营救到尼莫. 这个题给的数据是墙的交点为整数点,但鱼爸爸实在非墙的地方自由移动. 因此,这个题有两个难点: 1.如果建图保存地图 2.如何在地图上遍历 由于题目是给出一个点(x,y),来表示一段墙 我便用一对X,Y来表示

POJ 2049 Finding Nemo

Finding Nemo Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 8631   Accepted: 2019 Description Nemo is a naughty boy. One day he went into the deep sea all by himself. Unfortunately, he became lost and couldn't find his way home. Therefo

poj2049(Finding Nemo)

题目大意: 有一片方格区域,由一米的小方格构成,方格的边可能为墙意为不能通过,可能是空白,可能是门意为可以通过,一位名叫Nemo的孩子在方格的任意位置坐标,坐标为浮点类型.问一位名叫Marlin的人至少通过几个门才能找到Nemo. 解题思路: 做了好久,刚开始没思路不知道怎么建图,后来看了看discuss,可以根据左下角的点来建图,这时只需要记住两个方向即可,记住每个点左下角上方向为"1",右方向为"0".例如:map[I][J][0] =1 意思就是i,j点的右方

【POJ 2049】Finding Nemo

[POJ 2049]Finding Nemo 迷宫类Bfs,不同于之前的是之前是点 这次是房间,我的做法是把每个房间看做一个点(移动地图使房间为整型坐标 便于用数组下表表示房间坐标) 上下左右是墙/门/无用1 0 -1表示 然后Bfs遍历即可 坑点有x/y<0 和x/y > 199的情况 贡献了好多个RE 上代码 #include <cstdio> #include <cstring> #include <queue> using namespace std

POJ 2049— Finding Nemo(三维BFS)10/200

海底总动员.... 这个题开始不会建图,彻底颠覆以前我对广搜题的想法.想了好久, 忽然想到省赛时HYPO让我做三维BFS来着,一直没做,看到POJ计划这个题,就是三维BFS解题,就做了一下, 对于这个题....实在不知道说什么好,又坑.又SB,POJ的后台数据和题目描述的完全不一样,看了DIscuss之后开始 改动代码,最后改的又臭又长,搜了无数题解找数据,卡了整整两天. 挥挥洒洒 160行....同时也是我第一次使用  三维建图+BFS,纪念一下! 2049 算是我攻克POJ计划的第一个卡两天

POJ 2049 Finding Nemo BFS

题目大意:给你一个奇奇怪怪的迷宫, 这个迷宫包括墙和门.再给你一个起始坐标, 问你从迷宫内到外面至少要穿越多少的门. 题目分析: 穿越多少门等同于路过了多少个格子. 为此我们可以将整个地图中的格子,门,墙,墙的交界处(格子的顶点)全部抽象成点. 即坐标(奇数,奇数)为格子的坐标,坐标(奇数,偶数)或坐标(偶数,奇数)为门或墙的坐标,坐标(偶数,偶数)为格子的顶点. 这样题目就转化成了从起始点所在的格子走到迷宫外的格子最少要经过多少个格子,用step[i][j]表示走出迷宫后遇到的第一个格子的坐标

POJ 2049-Finding Nemo(三维bfs解决类迷宫问题)

Finding Nemo Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 7902   Accepted: 1827 Description Nemo is a naughty boy. One day he went into the deep sea all by himself. Unfortunately, he became lost and couldn't find his way home. Therefo

基本概念之八

句子生成器程序之一 var randomBodyParts = ["Face", "Nose", "Hair"]; var randomAdjectives = ["Smelly", "Boring", "Stupid"]; var randomWords = ["Fly", "Marmot", "Stick", "M

英语电影

诺丁山> 1 阿甘正传 爱情 403685人推荐 2 泰坦尼克号 历史 370772人推荐 3 冒牌老爸 家庭 323028人推荐 4 电子情书 爱情 279630人推荐 5 费城故事 爱情 260652人推荐 6 朱丽叶 爱情 255340人推荐 7 肖申克的救赎 犯罪 254055人推荐 8 男人百分百 爱情 <Forest Gump>阿甘正传 <Lion King>狮子王 <Philadelphia>费城 <Shawshank's Redemption