我写得好丑
oin救救我
我要继续开大车了
2045. Second Minimum Time to Reach Destination
就给你一个双向图包含1~n
每两个点间最多只有1条边
你每经过一条边需要花time
然后有红绿灯,只有绿灯才可以走
每经过change灯号会变,开始走的时候都是绿灯
请问从节点1到节点n需要花费第二少的时间是多久
思路 :
就从节点1用BFS开始走
然后在每一次BFS深度时用一个矩阵纪录这个点有没有重复到过
就这样找到花费第二少的深度
这个深度是你从节点1到节点N需要走过的边数
接着把它变成时间,就可以得到答案了
GOLANG CODE :
func secondMinimum(n int, edges [][]int, time int, change int) int {
graph := make([][]int, n+1)
greater := 0
for i := 1; i < n+1; i++ {
graph[i] = make([]int, 0)
}
for _, val := range edges {
graph[val[1]] = append(graph[val[1]], val[0])
graph[val[0]] = append(graph[val[0]], val[1])
}
queue, cnt, prevcnt := make([]int, 1), 0, 0
queue[0] = 1
for len(queue) > 0 {
tmp := len(queue)
reached := make([]bool, n+1)
for tmp > 0 {
cur := queue[0]
queue = queue[1:]
if cur == n && cnt > prevcnt {
greater++
prevcnt = cnt
}
for _, val := range graph[cur] {
if !reached[val] {
queue = append(queue, val)
reached[val] = true
}
}
tmp