状态转移方程
伪代码
测试图
python代码实现
from math import inf
# 初始化邻接矩阵
matrix = [[inf, -3, inf, 3, 4, 2],
[inf, inf, inf, inf, 6, inf],
[inf, -4, inf, 8, inf, inf],
[inf, inf, inf, inf, inf, -3],
[inf, inf, -1, inf, inf, inf],
[inf, inf, -2, inf, inf, inf],
]
# 顶点个数
n = len(matrix)
# 初始化dp表
table = [[inf] * n for x in range(n)]
# 设置起点start,
table[0][0] = 0
# 对于使用至多n-1条边
for i in range(1, n):
# 对于顶点v,求start到v的最短路径
for v in range(n):
table[i][v] = table[i - 1][v] # 起始状态
for k in range(n):
# 检测每一个进入v的边,更新table
table[i][v] = min(table[i][v], matrix[k][v] + table[i - 1][k])
结果: