1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| const inf = math.MaxInt32
func networkDelayTime(distances [][]int, n int, k int) int { distanceMap := make([][]int, n) for i := range distanceMap { distanceMap[i] = make([]int, n) for j := range distanceMap[i] { distanceMap[i][j] = inf } } for _, d := range distances { distanceMap[d[0] - 1][d[1] - 1] = d[2] }
dist := make([]int, n) for i := range dist { dist[i] = inf } dist[k - 1] = 0
visited := make([]bool, n)
for i := 0; i < n; i++ { closest := -1 for candicate, v := range visited { if !v && (closest == -1 || dist[candicate] < dist[closest]) { closest = candicate } }
visited[closest] = true
for ne, d := range distanceMap[closest] { if d == inf {continue} dist[ne] = Min(dist[ne], dist[closest] + d) } }
ans := -inf for _, d := range dist { if d == inf { return -1 } ans = Max(ans, d) }
return ans }
func Min(a, b int) int { if a < b { return a } return b }
func Max(a, b int) int { if a > b { return a } return b }
|