华为 · 计算几何 · 算法编程题
华为 计算几何 n ≤ 100 时限 3 秒 / 256 MB

题目描述

您正在为一个先进的神经形态计算平台设计一个信号传播模拟器。
该平台的核心是一个二维神经元矩阵 M ,矩阵中的每个单元可以是 非导电介质(值为 0 ),也可以是具有特定 激活延迟 的 神经元(值为 1 到 k 的正整数)。
信号在矩阵中按以下规则传播:
当一个神经元被激活后,它会经历一段等于其激活延迟时间的内部处理。
处理完成后,它会立即向其上、下、左、右四个相邻的神经元发送激活信号。
您的任务是,给定一个初始被激活的神经元集合 S 和一个特定的目标神经元 T ,计算出目标神经元 T 被 首次激活 的最早时间。
如果目标神经元的位置是非导电介质,或者信号无论如何都无法传播到该位置,则返回 -1 。

输入输出

输入描述
输入数据包含以下几个部分:
1. 二维神经元矩阵 M :
其维度为 m × n ,其中 0 < m, n ≤ 100 。矩阵中的每个元素 M_ij 代表该位置的单元类型: 0 表示非导电介质,正整数表示神经元的激活延迟。
2. 初始激活源 S :
一个由多个坐标组成的集合 S = (x_i, y_i) | 0 ≤ x_i < m, 0 ≤ y_i < n 。激活源的数量小于 5 。
3. 目标神经元 T :
单个坐标 T = (a, b) ,其中 0 ≤ a < m, 0 ≤ b < n 。
输入格式 :
第 1 行 : 矩阵的维度 m 和 n ,由空格分隔。
第 2 行到第 m+1 行 : 神经元矩阵 M 的内容,每行代表矩阵的一行,行内数字由空格分隔。
第 m+2 行 : 初始激活源 S 的坐标。例如,`x1 y1 x2 y2 ...` 表示集合 (x_1, y_1), (x_2, y_2), ... 。
第 m+3 行 : 目标神经元 T 的坐标 `a b`。
输出描述
一个整数,表示信号传播到目标神经元 T 所需的最短时间。
如果无法到达,则输出 -1 。

样例共 2 组

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

算法解析依据一般

考点:计算几何

数据规模 n ≤ 100 | 限制 3 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:m ≤ 100,n ≤ 100
  • 复杂度门槛:允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 源站时限:3 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:计算几何

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

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

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

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

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

该范式的通法易错点

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

对照本题

  • 数据规模 n ≤ 100,允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

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

样例 2

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

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

本题来源:2025年秋招-华为-11月06号留学生开发岗。

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