状态转移方程

Java 单源最短路径 单源最短路径python_python

伪代码

Java 单源最短路径 单源最短路径python_算法_02

测试图

Java 单源最短路径 单源最短路径python_python_03

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])

结果:

Java 单源最短路径 单源最短路径python_初始化_04