会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员,或
购买
该题目所属题库
,可解锁完整内容。
解题思路
网格没有障碍,两点之间最短路就是曼哈顿距离。把所有非 0 格子记下来,从中心出发把它们都走到,最后再走回中心,求总步数最小值。
- 扫一遍格子,把非 0 的坐标放进 points,共 k 个点。起点是中心 (sx,sy)=(⌊n/2⌋,⌊m/2⌋)。
- 用 DFS 枚举访问顺序:当前在 (x,y),已经走过的距离是 step,用集合 vis 记下已经访问过的必访点。
- 若 vis 里已经有 k 个点,说明必访点都走完了,再补上走回中心的曼哈顿距离,用它更新答案 ans。
- 若当前 step 已经不小于目前的 ans,这条路不可能更优,直接返回。
- 否则枚举还没访问的点 p,走进去并累加曼哈顿距离,递归结束后再从 vis 里拿掉(回溯)。