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

题目描述

在一个广袤的宇宙中,存在一个由 N 个星系组成的星际网络,星系编号从 0 开始。
探险家们依赖 M 条不同的“跃迁航线”在星系间穿梭。每条跃迁航线都连接着多个星系。
如果两条不同的跃迁航线都经过同一个星系,那么探险家就可以在该星系从一条航线切换到另一条,我们称之为一次“航线换乘”。
现在,给定一系列的星际旅行任务,每个任务包含一个起始星系和一个目标星系,请计算出完成每个任务所需的最少航线换乘次数。

输入输出

输入描述
第一行包含三个整数 N 、 M 和 K ,分别代表星系的总数量、跃迁航线的总数量以及需要查询的旅行任务数量。
接下来 M 行,每行描述一条跃迁航线。
行首是一个整数 C ,表示该航线连接的星系数量,随后是 C 个整数,代表这些星系的编号。
再接下来 K 行,每行包含两个整数 S 和 T ,分别代表一个旅行任务的起始星系和目标星系。
所有变量的取值范围均为 [0, 1000] 。
输出描述
对于每个查询任务,输出一个整数,即从起始星系 S 到目标星系 T 所需的最少换乘次数。
如果无法从 S 到达 T ,则输出 -1 。

样例共 1 组

样例 1
输入
19 9 6
5 5 8 10 13 18
4 1 5 7 9
2 9 10
7 1 5 6 7 12 15 16
7 0 4 6 8 13 14 17
6 3 4 10 15 16 18
9 2 3 6 7 8 9 12 14 17
5 1 3 7 9 11
9 3 5 6 8 9 10 14 15 18
2 5
1 8
10 6
5 12
5 7
17 8
输出
1
1
0
0
0
0

算法解析依据充分

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

限制 3 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:3 秒(牛客口径,非本题专属门槛)

解题思路

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

本题切入点

把航线看成「集团」建图(星系 ↔ 航线),从起点 BFS 求到目标星系的最少换乘次数;不可达输出 −1,多次查询可预处理全源最短路。

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

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

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

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

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

该范式的通法易错点

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

样例

样例 1

  • 输入:19 9 6 / 5 5 8 10 13 18 / 4 1 5 7 9 / 2 9 10 / 7 1 5 6 7 12 15 16 / 7 0 4 6 8 13 14 17 / 6 3 4 10 15 16 18 / 9 2 3 6 7 8 9 12 14 17 / 5 1 3
  • 输出:1 / 1 / 0 / 0 / 0 / 0

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

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

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