簡體   English   中英

當特定節點對之間存在多條最短路徑時,boost graph dijkstra_shortest_paths 如何選擇最短路徑?

[英]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 函數,它運行良好。 后來我意識到在給定的一對節點AB之間,可以有多個最短路徑。 在這種情況下,Dijkstra 函數如何在這些最短路徑中進行選擇? 它是否取決於節點 ID 或這些節點在內存中的存儲順序?

我發現了一些問題,詢問如何提取兩個節點之間的所有最短路徑,因為通常只提取其中一個,例如this questionthis 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM