华为OD机试真题 新系统 - 勇攀数字高峰 (JavaPyCC++JsGo)

5 阅读3分钟

勇攀数字高峰

2026 华为OD机试真题 4月1日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。 地图已经保证最低海拔和最高山峰都只有一个。

路径条件

  • 登山规则:路径上的海拔必须严格递增
  • 移动限制:可以向上下左右 44 个方向移动
  • 路径限制:路径必须从最低海拔开始,到最高海拔结束
  • 访问控制:每个地点只能走一次
  • 高度差限制:每一步的攀登高度差必须大于 00,小于等于指定值

输入描述

输入一个二维数组表示的海拔图,维度为 n×m (2≤n,m≤10 ),

每个元素都是一个整数 xx 输入一个整数参数表示单步最大允许的高度差

输出描述

输出满足条件的登山路径的数量

示例1

输入

[[1,2],[3,5]],2

输出

1

说明

起点:最低点坐标 (0,0),海拔高度 1 终点:最高点坐标 (1,1) ,海拔高度 5 单步最大高度差:2 可行路径: 路径 1 :(0,0),(1,0),(1,1)

示例2

输入

[[4,3],[3,2]],1

输出

2

说明

起点:最低点坐标 (1,1),海拔高度 2 终点:最高点坐标 (0,0),海拔高度 4 单步最大高度差:1 可行路径: 路径 1:(1,1), (0,1), (0,0) 路径 2:(1,1), (1,0), (0,0)

示例3

输入

[[1,3],[3,4]],1

输出

0

说明

起点:最低点坐标 (0,0),海拔高度 1 终点:最高点坐标 (1,1),海拔高度 4 单步最大高度差:1 可行路径:0

解题思路

核心思想

这道题是一个典型的二维网格搜索问题,可以使用深度优先搜索 (DFS) 结合回溯来解决。

  1. 确定起点与终点

    • 题目保证最低海拔和最高海拔都只有一个。
    • 遍历整个网格,找到最小值(起点)及其坐标,最大值(终点)及其坐标。
  2. 搜索过程 (DFS)

    • 从起点出发,向四个方向(上下左右)尝试移动。
    • 移动条件
      1. 下一个位置的海拔必须比当前位置高(严格递增)。
      2. 下一个位置的海拔与当前位置的海拔差必须在允许的最大高度差 kk 之内。
      3. 下一个位置必须在网格范围内。
      4. 每个位置只能走一次(访问控制)。
    • 如果到达终点(最高山峰),则找到一条满足条件的路径,路径数量加 1。
  3. 回溯

    • 在进入下一步搜索前,标记当前位置为已访问。
    • 搜索结束后,撤销标记(回溯),以便其他路径可以访问该位置。

复杂度分析

  • 时间复杂度O(4N×M)O(4^{N \times M})。虽然理论上最坏情况是指数级的,但由于“严格递增”和“最大高度差”的限制,搜索树的分支会被极大地剪枝,因此在 10×1010 \times 10 的网格中运行效率很高。

  • 空间复杂度O(N×M)O(N \times M)。主要消耗在递归栈和访问标记数组(或集合)上。