美文网首页
Dijkstra 最短路径算法,真的人人都会写吗。leetcod

Dijkstra 最短路径算法,真的人人都会写吗。leetcod

作者: 克罗地亚催眠曲 | 来源:发表于2021-08-21 12:23 被阅读0次

大部分人都能说得出其原理,在面试中真的能快速的写出来吗。经典算法的熟练度需要加强。

package leetcode

import "math"

func networkDelayTime(times [][]int, n, k int) int {
    const inf = math.MaxInt64 / 2
    g := make([][]int, n)
    for i := range g {
        g[i] = make([]int, n)
        for j := range g[i] {
            g[i][j] = inf
        }
    }
    for _, t := range times {
        x, y := t[0]-1, t[1]-1
        g[x][y] = t[2]
    }
    dist := make([]int, n)
    for i := range dist {
        dist[i] = inf
    }
    dist[k-1] = 0
    used := make([]bool, n)
    for i := 0; i < n; i++ {
        x := -1
        for y, u := range used {
            if !u && (x == -1 || dist[y] < dist[x]) {
                x = y
            }
        }
        used[x] = true
        for y, time := range g[x] {
            dist[y] = min(dist[y], dist[x]+time)
        }
    }
    ans := 0
    for _, d := range dist {
        if d == inf {
            return -1
        }
        ans = max(ans, d)
    }
    return ans
}

相关文章

网友评论

      本文标题:Dijkstra 最短路径算法,真的人人都会写吗。leetcod

      本文链接:https://www.haomeiwen.com/subject/xqefiltx.html