Leetcode815.公交线路 Bus Routes(Java)
##BFS##
广度优先搜索
2021-03 阿里春招题目
该题应该为图论题,边有权值的情况下寻找最短路径,采用多源BFS解决
示例 1:
输入:
routes = [[1,2,7],[3,6,7]]
,source = 1
,target = 6
输出:2
解释:最优策略是先乘坐第一辆公交车到达车站 7 , 然后换乘第二辆公交车到车站 6 。
- 使用
HashMap<Integer, LinkedList<Integer>> map
保存每个站点经过的线路,例如示例1中(key = 7, value = [0,1])
的键值对代表的是7号公交站点存在与公交线路0、1中 LinkedList<Integer> queue
队列为BFS中遍历的辅助队列,存放每一层需要遍历的站点- 已示例1为例,BFS遍历第一层流程如下,初始化队列
queue
只有source = 1
一个元素- 遍历队列中元素查询
HashMap
中包含站点1
的所有线路,得线路0
- 遍历线路
0
的所有站点j = 2,7
- 若
j == target
,找到目标站点,返回结果 - 对于所有非目标站点
j
,都为下一层需要遍历的节点,都需要进队列等待遍历
- 若
- 遍历完第一层所有
j
后,代表的实际含义是从站点1
出发,乘坐一辆公共汽车能够到达的所有站点j
- 因此遍历完一层后,公交车计数器
cnt++
- 遍历队列中元素查询
- 同样的遍历方法,遍历至结果出现或遍历结束为止
- 因为图有环路,因此可能会发生遍历死循环,
- 采用自动去重的
HashSet<Integer> set
来记录已经遍历过的线路 - 如果使用
HashSet<Integer> set
记录已经遍历过的站点,最用一个用例会因为超时而不通过
- 采用自动去重的
时间复杂度: O ( M × N ) O(M\times N) O(M×N)
class Solution {