华为 · 图 · 算法编程题
华为 n ≤ 20 时限 1 秒 / 256 MB

题目描述

小红面对若干条单向公交线路,每条线路按行驶方向给出互不重复的站点。她要从站点 A 到站点 B ,可以直达或最多换乘一次,换乘只能发生在两条线路的共同站点。
计算行程经过的最少站点数,起点和终点都计入,换乘站只计一次;无法到达输出 -1 。

输入输出

输入描述
第一行输入线路数 n 。接下来 n 行,每行先输入站点数 m ,再按方向输入 m 个互不重复的站点编号。最后一行输入 A,B 。
保证 1 ≤ n ≤ 20 , 2 ≤ m ≤ 100 ,站点编号在 [1,2000] , A≠ B 。
输出描述
输出最少经过站点数,无法到达输出 -1 。

样例共 2 组

样例 1 · 两条线路没有共同站点且无法直达。
输入
2
4 1 2 3 4
3 5 6 7
1 7
输出
-1
样例 2 · 从第一条线路乘到站点 3,再换乘第二条线路到 8。
输入
3
5 1 2 3 4 5
4 3 6 7 8
3 5 9 10
1 8
输出
6

算法解析依据充分

考点:图

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

题目画像

  • 数据规模:m ≤ 100,n ≤ 20
  • 复杂度门槛:允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:图

本题切入点

线路图最短路:先枚举直达(同一线路内站点相对顺序),再枚举换乘站把两条线路串起来,取最少经过站点数(换乘站只计一次);n≤20 可直接枚举。

把关系抽象成点与边,再按问的类型选遍历/最短路/连通性算法。

思路框架(图 通法 · 非本题专属)

  1. 建图:邻接表(稀疏)或邻接矩阵(稠密)。
  2. 问「最少几步 / 最短路径」且边权为 1 → BFS。
  3. 问「是否连通 / 需要加几条边连通」→ 并查集 / 连通块计数。
  4. 问「带权最短路」→ Dijkstra(非负权)或 Floyd(点数小、多源)。
  5. 问「依赖顺序」→ 拓扑排序。

实现要点:注意是有向图还是无向图,无向图加边记得双向。

复杂度:时间 O(V+E) 遍历 / O(E log V) Dijkstra | 空间 O(V+E)

该范式的通法易错点

  • 无向图只加了单向边。
  • BFS 入队时没标记访问,导致重复入队。

对照本题

  • 数据规模 n ≤ 20,允许指数级做法:暴力枚举全部子集 2^n / 回溯搜索 / 状压 DP。

样例解读

样例 1:输入 2 / 4 1 2 3 4 / 3 5 6 7 / 1 7 → 输出 -1

两条线路没有共同站点且无法直达。

样例 2:输入 3 / 5 1 2 3 4 5 / 4 3 6 7 8 / 3 5 9 10 / 1 8 → 输出 6

从第一条线路乘到站点 3,再换乘第二条线路到 8。

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

本题来源:2026年-华为-06月17号开发岗。

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