算法 - 图论11(Swift版本)

6 阅读1分钟

题目1:Floyd 算法精讲

讲解

动态规划思路

func floyd(n: Int, m: Int, grid:[[Int]]) {
    var dp = Array(repeating: Array(repeating: Array(repeating: 10001, count: n + 1), count: n + 1), count: n + 1)
    // 双向图
    for line in grid {
        dp[line[0]][line[1]][0] = line[2]
        dp[line[1]][line[0]][0] = line[2]
    }
    for k in 1...n {
        for i in 1...n {
            for j in 1...n {
                dp[i][j][k] = min(dp[i][j][k - 1], dp[i][k][k - 1] + dp[k][j][k - 1])
            }
        }
    }
    for i in 1...n {
        for j in 1...n {
            print("i:\(i) j:\(j) min:\(dp[i][j][n])")
        }
    }
}

floyd(n:7, m: 3, grid: [[2, 3, 4], [3, 6, 6], [4, 7, 8]])

题目2:A * 算法精讲 (A star算法)

讲解

A * 算法 是利用启发式函数 来优化 BFS, 确定一个优先遍历的方向。

图论总结:

最短路算法总结篇
图论总结篇