华为 · 计算几何 · 算法编程题
华为 计算几何 n ≤ 1e3 时限 5 秒 / 256 MB

题目描述

一位勇敢的探险家正准备深入一个神秘的地下洞穴,寻找传说中的古代遗物。
整个洞穴系统可以看作一个二维网格。
探险家每次只能向上、下、左、右四个方向移动一格。
探险家携带的氧气瓶是有限的,最多只够支持连续行走 k 步。
氧气耗尽后,必须立刻找到洞穴内的氧气补给站来补充氧气,否则将无法继续前进。
在补给站,氧气可以被瞬间充满,恢复到最大值(即可再次行走 k 步)。
您的任务是编写一个程序,计算探险家从洞穴入口到达古代遗物所在位置所需的最短路径长度(总步数)。

输入输出

输入描述
输入包含以下部分:
1. 第一行 : 洞穴的尺寸,包含两个整数 m 和 n ,分别代表网格的行数和列数。
1 ≤ m, n ≤ 1000
2. 接下来的 m 行 : 每行包含 n 个整数,描述了 m × n 的洞穴网格。每个整数的含义如下:
0 : 可通行的洞穴路径。
1 : 无法通行的岩壁障碍。
2 : 氧气补给站。
3. 倒数第三行 : 两个整数 r_s, c_s ,代表探险家出发的入口坐标(左上角为 (0,0) )。
4. 倒数第二行 : 两个整数 r_d, c_d ,代表古代遗物所在的终点坐标。
5. 最后一行 : 一个整数 k ,代表氧气瓶支持的最大连续移动步数。
1 ≤ k ≤ 100000
输出描述
输出一个整数,表示从入口到遗物所在地的最短路径长度。如果无法到达,则输出 -1 。

样例共 2 组

样例 1
输入
3 3
0 0 0
0 2 0
0 0 0
0 0
2 2
2
输出
4
样例 2
输入
3 3
0 0 0
1 1 1
0 0 0
0 0
2 2
2
输出
-1

算法解析依据一般

考点:计算几何

数据规模 n ≤ 1e3 | 限制 5 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:k ≤ 1e5,m ≤ 1e3,n ≤ 1e3
  • 复杂度门槛:允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 源站时限:5 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:计算几何

把几何关系转成坐标运算,用整数运算避免浮点误差。

思路框架(计算几何 通法 · 非本题专属)

  1. 把点、向量、线段用坐标表示。
  2. 几何判定(平行、垂直、共线、相交)尽量用叉积/点积的整数形式:叉积为 0 即共线。
  3. 距离用平方比较,避免开方带来的浮点误差。
  4. 面积用叉积(鞋带公式)计算。

实现要点:叉积 cross = x1*y2 - x2*y1;用它判断顺时针/逆时针和共线。

复杂度:时间 O(n) ~ O(n²) | 空间 O(n)

该范式的通法易错点

  • 用浮点相等判断几何关系(应用整数叉积)。
  • 没考虑三点共线、重合等退化情况。

对照本题

  • 数据规模 n ≤ 1e3,允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:3 3 / 0 0 0 / 0 2 0 / 0 0 0 / 0 0 / 2 2 / 2
  • 输出:4

样例 2

  • 输入:3 3 / 0 0 0 / 1 1 1 / 0 0 0 / 0 0 / 2 2 / 2
  • 输出:-1

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2025年秋招-华为-11月12号开发岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解