mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-05 16:36:41 +08:00
39 lines
857 B
Go
39 lines
857 B
Go
package leetcode
|
||
|
||
func numBusesToDestination(routes [][]int, S int, T int) int {
|
||
if S == T {
|
||
return 0
|
||
}
|
||
// vertexMap 中 key 是站点,value 是公交车数组,代表这些公交车路线可以到达此站点
|
||
vertexMap, visited, queue, res := map[int][]int{}, make([]bool, len(routes)), []int{}, 0
|
||
for i := 0; i < len(routes); i++ {
|
||
for _, v := range routes[i] {
|
||
tmp := vertexMap[v]
|
||
tmp = append(tmp, i)
|
||
vertexMap[v] = tmp
|
||
}
|
||
}
|
||
queue = append(queue, S)
|
||
for len(queue) > 0 {
|
||
res++
|
||
qlen := len(queue)
|
||
for i := 0; i < qlen; i++ {
|
||
vertex := queue[0]
|
||
queue = queue[1:]
|
||
for _, bus := range vertexMap[vertex] {
|
||
if visited[bus] == true {
|
||
continue
|
||
}
|
||
visited[bus] = true
|
||
for _, v := range routes[bus] {
|
||
if v == T {
|
||
return res
|
||
}
|
||
queue = append(queue, v)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return -1
|
||
}
|