题目1: dijkstra(堆优化版)精讲
使用小顶堆,对边权值进行自动排序。
题目2: Bellman_ford 算法精讲
单源最短路问题, 考虑边有负权值的情况。
对所有边进行松弛 n - 1次。
func bellmanFord(n: Int, e: Int, grid: [[Int]]) {
var minDist = Array(repeating: Int.max, count: n + 1)
minDist[1] = 0
// n - 1次松弛
for _ in 1..<n {
for line in grid {
let from = line[0]
let to = line[1]
let val = line[2]
if minDist[from] != Int.max {
minDist[to] = min(minDist[to], minDist[from] + val)
}
}
print("\( minDist.map { String($0) }.joined(separator: " ") )")
}
if minDist[n] == Int.max {
print("unconnected")
} else {
print("\(minDist[n])")
}
}
// bellmanFord(n: 6, e: 5, grid: [[5, 6, 1], [4, 5, 1], [3, 4, 1], [2, 3, 1], [1, 2, 1]]) // 5
// bellmanFord(n: 6, e: 7, grid: [[5, 6, -2], [1, 2, 1], [5, 3, 1], [2, 5, 2], [2, 4, -3], [4, 6, 4], [1, 3, 5]]) // 1
bellmanFord(n: 4, e: 2, grid: [[1, 2, -1], [3, 4, -1]]) // unconnected