狀態轉移方程
偽代碼
測試圖
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])
結果: