题解 P2199 【最后的迷宫】
洛谷P2199
题目链接
一、题意分析
根据题面我们可以知道
- 基本信息:哈利在一个
N\times M 的迷宫中,他需要移动以看到奖杯,赢得比赛。哈利可以向上下左右四个方向行走一格,他移动的非常快,行走一格只需要1s ,也可以向东,东北,东北,西......八个方向看。迷宫的状态有两种:一种是空地,可以行走,在该题中用大写字母 O 来表示;另一种是墙,不可以行走,在该题中用大写字母 X 来表示。哈利不可以透过墙看到奖杯。 - 题目需求:题目让我们求出哈利看到奖杯的最短时间。
- 输入和输出信息:首先输入
N 和M ,然后输入一个高为N ,宽为M 的矩阵。题目有多组测试数据,每一组测试数据会给出奖杯的坐标和哈利的坐标,共有四个数,当这四个数均为0 时,输入结束。对于每一组测试数据,如果哈利可以看到奖杯,那么输出哈利行走的最短时间;如果哈利无法看到奖杯,那么输出Poor Harry.
二、思路说明
做题要有一个好习惯:先看数据范围。
对于
搞定了存储问题,接下来是处理那些地方可以看到奖杯。
奖杯是不会动,那么每个能看见奖杯的位置也是不变的,可以提前将能看见奖杯的位置找出来,在
当这些问题全部解决完之后,便是用 bfs 遍历哈利所有可以走的点,第一次走到能看见奖杯的地方便已经得出最优解,这也是为何不适用 dfs 的原因,dfs 在求最短路径时时间复杂度较高,效率远不如 bfs.
三、小坑
多测不清空,报零两行泪。
如果哈利和奖杯的位置一样,那么直接输出
如果哈利一开始就能看到奖杯,也是直接输出
代码