9.23华为OD机试真题 新系统 – 小菊的寻宝之旅 (JavaPyCC++JsGo)

2026 华为OD机试真题9月23日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

小菊听说在一个神秘的城堡里藏着宝藏,她决定去寻宝。城堡由 n 个房间组成,某些房间之间有通道相连。小菊从房间 s 出发,想要到达藏有宝藏的房间 t。

给定房间数量 n、通道列表 edges、起点 s 和终点 t,求小菊从起点到终点经过通道最短的路径长度。所有通道长度相同且均为 1,例如房间 1 → 2 → 3 经过两条通道,路径长度为 2。

如果起点和终点相同,返回 0;如果终点无法到达,返回 -1。

2026 华为OD机试真题9月23日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

输入描述

第一行输入房间数量 n,满足 1 ≤ n ≤ 10000,房间编号为 1 到 n。

第二行输入二维数组 edges,表示无向通道列表。边数 m 满足 0 ≤ m ≤ 100000,允许自环和重边。

第三行输入起点 s,第四行输入终点 t,满足 1 ≤ s,t ≤ n。

输出描述

输出从起点 s 到终点 t 的最短路径长度。若 s=t 则输出 0;若终点不可达则输出 -1。

示例1

输入

4
[[1, 2], [2, 3], [3, 4], [1, 3]]
1
4

输出

2

说明

最短路径为房间 1 → 3 → 4,共经过两条通道。

示例2

输入

4
[[1, 2], [2, 1], [3, 4], [4, 3]]
1
3

输出

-1

说明

房间 1、2 和房间 3、4 分属两个连通分量,无法从房间 1 到达房间 3。

示例3

输入

5
[]
1
1

输出

说明

起点与终点相同,无需经过任何通道。

示例4

输入

4
[[1, 1], [1, 2], [2, 3], [3, 4]]
1
4

输出

3

说明

自环 [1,1] 不会缩短路径,最短路径为 1 → 2 → 3 → 4。

示例5

输入

6
[[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [1, 6], [2, 5]]
1
6

输出

1

说明

房间 1 和房间 6 之间存在直接通道,最短路径长度为 1。

解题思路

本题采用【广度优先搜索】算法:所有通道的长度都为 1,从起点开始按层扩展时,先访问到的房间一定具有更短的路径,因此 BFS 可以直接求出无权图中的最短距离。

先根据 edges 建立无向图的邻接表,再使用数组记录每个房间到起点的距离,初始值为 -1 表示尚未访问。起点距离设为 并加入队列,每次取出队首房间,将所有未访问的相邻房间距离更新为当前距离加一。

第一次访问终点时即可立即返回其距离。如果队列为空后仍未访问终点,说明两者不连通,返回 -1。起点和终点相同时直接返回

THE END