最新华为OD机试
题目描述
给定一个m*n的整数矩阵作为地图,矩阵数值为地形高度中庸行者选择地图中的任意一点作为起点,尝试往上、下、左、右四个相邻格子移动;移动时有如下约束:
- 中庸行者只能上坡或者下坡,不能走到高度相同的点
- 不允许连续上坡或者连续下坡,需要交替进行
- 每个位置只能经过一次,不能重复行走
请给出中庸行者在本地图内,能连续移动的最大次数
输入描述
第一行两个数字,分别为行数和每行的列数;
后续数据为矩阵地图内容
矩阵边长范围1-8,地形高度范围0-100000
输出描述
一个整数,代表中庸行者在本地图内,能连续移动的最大次数
示例1
输入
2 2
1 2
4 3
输出
3
说明
示例2
输入
3 3
1 2 4
3 5 7
6 8 9
输出
4
说明
解题思路
✅ 题目本质
这是一个带限制的图遍历问题,需要在一个二维地图上做路径搜索,且有如下特殊规则:
📌 规则总结
- 只能走四个方向:上、下、左、右;
- 不能走回头路:每个格子只能访问一次;
- 不能走等高路径;
- 上坡下坡必须交替:
- 如果前一步是上坡(高度变高),下一步必须是下坡(高度变低);
- 如果前一步是下坡,下一步必须是上坡;
- 第一步可以任选上坡或下坡。
🔍 目标
求从任意起点出发,能连续移动的最大步数。
🧠 解法思路:DFS + 回溯
用深度优先搜索(DFS)尝试从每个格子出发,走出最长的合法路径,结合回溯法控制访问标记。
🧱 状态定义
在 DFS 中维护的状态包括:
- 当前坐标 (x, y)
- 当前路径长度
steps
- 当前移动方向
mode
(1=上坡,-1=下坡,0=起点)
🔁 遍历逻辑
- 从每一个起点
(i,j)
出发 - 尝试四个方向走一步,看是否满足如下条件:
- 不越界;
- 没有访问过;
- 高度不同;
- 当前方向与前一步相反(即上坡后只能下坡,下坡后只能上坡);
<