通过率 52% · 提交 271 · 通过 141
小慕正在参与一个网络信号质量评估项目。他将测试区域划分为R行C列的,每个栅格都有一个信号质量数值S(已归一化,无单位,值越大信号越好)。 小慕需要从起点[0, 0]到终点[R-1, C-1]规划一条最优的路测路线,并返回该路线的得分。 规则如下: 1. 路测路线可以向上、下、左、右四个方向移动,不能沿对角线移动。 2. 路线的评分以该路线上信号最差的栅格为准。例如,路径8→4→5→9的评分为4。最优路线是指评分最高的那条路线。
这类题属于华为 OD 机考真题方向中「200分 / 2024E」方向的高频题型,通常考察对「200分 / 2024E」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
第1行表示栅格的行数R
第2行表示栅格的列数C
第3行开始,每一行表示栅格地图一行的信号值,如5 4 5
最优路线的得分
示例 1
输入示例
3 3 5 4 5 1 2 6 7 4 6
输出示例
4
路线为5->4->5->6->6
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
题目要求从左上角找到一条路线到右下角,该条路线中的最小值要尽可能地大。
本题很容易和路径类的 dp 问题混淆(例如 不同路径、不同路径 II、最小路径和 等等)。 但本题和该类路径 dp 问题有一个非常明显的不同:前者移动方向是上下左右,而后者的移动方向只有向下和向右。 本题如果使用 dp 的话,动态转移方程并不明确,因为转移的方向是未知的,不满足 dp 的无后效性。 因此本题不能用 dp 来解决。
寻路类型的问题,除了 dp,很容易想到使用 DFS 或者 BFS 来解决。 但本题显然不应该使用 DFS,因为 DFS 在寻路问题中本质上就是回溯穷举,在 20 * 20 = 400 的数据规模下必然超时。 因此思考如何用 BFS 解决该问题。
传统的 BFS 过程,用队列维护,先入队的节点必然先出队被考虑。但这种传统做法并不能满足该题目的要求。
首先考虑人脑是如何思考这个问题的。以题目所给的示例为例:
从值为 5 的起点 (0, 0) 出发,有两个近邻点可以选择,分别是 (0, 1) 和 (1, 0)。 但我们会优先选择 (0, 1) 作为路线的下一个点,因为 (0, 1) 的值为 4 大于 (1, 0) 的值 1,能使得当前路线中的最小值更大。
选择了 (0, 1) 之后,下一个可能的近邻点为三个,包括 (0, 2)、(1, 0) 和 (1, 1),它们的值分别为 5、1、2。 类似地,我们会优先选择 (0, 2) 作为路线的下一个点,因为 (0, 2) 的值为 5,是这三个近邻点中值最大的。
依照上述规律,每次我们都会选择所有近邻点中值最大的那个作为下一个点,直到到达终点。 接下来我们会依次选择 (1, 2) 和 (2, 2),到达右下角终点,完成 5 -> 4 -> 5 -> 6 -> 6 的路线。
所以,在搜索过程中,每次出队的节点不再是按照入队先后顺序弹出的,而是按照最大值作为优先级来弹出的。 显然以某种优先级作为出队依据,应该使用优先队列来代替队列。
这种包含了贪心思想的搜索方式并非传统的 BFS,称之为启发式搜索(Heuristic Search)。
> PS:不熟悉优先队列的话,排序后取出最大值也是可以的,在当前数据规模下是可以通过所有用例的。
复杂度分析
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有