1 回答

TA貢獻2080條經驗 獲得超4個贊
對Floyd-Warshall算法進行修改:
保留一對(distance, k),其中k是更新距離值的中間頂點,而不是僅保留距離。k默認值為-1。
if distance[i][j][0] > distance[i][k][0] + distance[k][j][0]:
distance[i][j] = (distance[i][k][0] + distance[k][j][0], k)
您可以通過遞歸重建任何最短路徑。
def get_path(i, j):
if distance[i][j] == +oo: # oo stand for infinite
return [] # None is also an option
k = distance[i][j][1]
if k == -1:
return [i, j]
else:
path = get_path(i, k)
path.pop() # remove k to avoid duplicates
path.extend(get_path(k, j))
return path
運行:O(length of path)
注意:獲得從x到 的最小成本路徑的要求y是從x到的任何路徑之間不存在負成本循環y。
添加回答
舉報