![](/img/trans.png)
[英]dijkstra_shortest_paths Boost Graph Lib 1.57.0 fails
[英]How does boost graph dijkstra_shortest_paths pick the shortest path when there are multiple shortest paths between a specific pair of nodes?
我有一個由大約 50000 個節點組成的未加權、無向網絡,我需要從這個網絡中提取任意一對節點之間的最短路徑。 我使用了 boost 庫中的 dijkstra_shortest_paths 函數,它運行良好。 后來我意識到在給定的一對節點A和B之間,可以有多個最短路徑。 在這種情況下,Dijkstra 函數如何在這些最短路徑中進行選擇? 它是否取決於節點 ID 或這些節點在內存中的存儲順序?
我發現了一些問題,詢問如何提取兩個節點之間的所有最短路徑,因為通常只提取其中一個,例如this question和this question 。 但是,我不想提取兩個節點之間的所有最短路徑。 相反,我想知道函數返回的路徑究竟是如何在其他具有相同長度的最短路徑中被拾取的。
我試圖深入了解 boost 庫中的相關源代碼,但它似乎對我來說太高級了,我很快就迷路了。 另外,我無法通過谷歌搜索找到答案,所以我在這里問。
記錄了確切的算法:
DIJKSTRA(G, s, w)
for each vertex u in V (This loop is not run in dijkstra_shortest_paths_no_init)
d[u] := infinity
p[u] := u
color[u] := WHITE
end for
color[s] := GRAY
d[s] := 0
INSERT(Q, s)
while (Q != Ø)
u := EXTRACT-MIN(Q)
S := S U { u }
for each vertex v in Adj[u]
if (w(u,v) + d[u] < d[v])
d[v] := w(u,v) + d[u]
p[v] := u
if (color[v] = WHITE)
color[v] := GRAY
INSERT(Q, v)
else if (color[v] = GRAY)
DECREASE-KEY(Q, v)
else
...
end for
color[u] := BLACK
end while
return (d, p)
在鏈接頁面中,它突出顯示事件發生的位置。
因此,發現頂點的順序決定了您的答案。
您可以通過指定自定義比較 ( CompareFunction
) 來實現其他決勝局,而無需修改圖表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.