华为 · 广度优先搜索(BFS) · 算法编程题
华为 广度优先搜索(BFS) n ≤ 50 时限 1 秒 / 256 MB

题目描述

在一个未来的量子计算中心,您需要引导一个数据包(Data Packet)通过一个复杂的量子网络。该网络可以被抽象为一个 m × n 的二维矩阵。网络中的每个节点都有其特定的功能:
- 标准通道 (Standard Channel) : 用数字 0 表示,数据包可以在相邻的标准通道节点之间自由移动,每次移动消耗 1 个时间单位。
- 防火墙 (Firewall) : 用数字 1 表示,这些节点是损坏的或被设置为不可通行,数据包无法进入。
- 量子纠缠门 (Quantum Entanglement Gate) : 用数字 2 表示。网络中存在成对的纠缠门。当数据包进入一个纠缠门时,它可以瞬间、不耗费任何时间地传送到与之配对的另一个纠缠门所在的位置。
- 起点 (Source) : 用符号 S 表示,是数据包的初始位置。
- 终点 (Destination) : 用符号 E 表示,是数据包的目标位置。
您的任务是计算出数据包从起点 S 到达终点 E 所需的最短时间。数据包只能在网络的上下左右四个方向上移动,不能移出网络边界,也不能穿过防火墙。如果数据包无法到达终点,则返回 -1 。

输入输出

输入描述
输入的第一行包含两个正整数 m 和 n ( 1 ≤ m, n ≤ 50 ),分别代表量子网络的行数和列数。
接下来的 m 行,每行包含 n 个字符,描述了量子网络每个节点的类型。字符集为 \'0', '1', '2', 'S', 'E' 。
输出描述
输出一个整数,表示数据包从起点到终点所需的最短时间。如果无法到达,则输出 -1 。

样例共 1 组

样例 1
输入
4 9
001010000
00000000S
0100E0001
100000001
输出
5

算法解析依据充分

考点:广度优先搜索(BFS)

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

题目画像

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

解题思路

推荐方向:广度优先搜索(BFS)

本题切入点

0-1 BFS 最短路:普通移动边权 1、纠缠门传送边权 0,用双端队列把 0 权边压到队首即可线性求 S→E 最短时间;不可达返回 −1。

按层扩散搜索,无权图上第一次到达即最短路。

思路框架(广度优先搜索(BFS) 通法 · 非本题专属)

  1. 起点入队并标记已访问。
  2. 每次取队首,把它的所有未访问邻居入队并记录步数。
  3. 第一次访问到目标时,步数即为最少步数。
  4. 网格类题目通常有 4(或 8)个方向,用方向数组统一处理。

实现要点:标记访问必须在入队时做,不能在出队时做,否则会重复入队甚至超时。

复杂度:时间 O(V+E) | 空间 O(V)

该范式的通法易错点

  • 出队才标记访问导致 MLE/TLE。
  • 网格边界没判,越界访问。
  • 多源 BFS 时只把第一个起点入队。

对照本题

  • 数据规模 n ≤ 50,允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。

样例

样例 1

  • 输入:4 9 / 001010000 / 00000000S / 0100E0001 / 100000001
  • 输出:5

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

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

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