题目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, 确定一个优先遍历的方向。