簡體   English   中英

O(E + V)算法計算給定圖上2個節點之間的最短路徑數

[英]O(E+V) algorithm to compute number of shortest paths between 2 nodes on given graph

給定具有頂點和邊| V |的圖G時 和| E | 分別用頂點u和t編寫O(| E | + | V |)算法以計算從u到t的最短路徑數,即,如果有5個長度為4的路徑,而長度4是從u到最短路徑的路徑到t時,算法將輸出5。

我知道該算法由於其運行時而必須以某種方式合並DFS或BFS,因為它們每個都具有O(| E | + | V |)運行時,但是我有點受阻。 我嘗試實現某種方法,使其在算法終止於t的情況下重復執行DFS,但這對於確定將哪些節點設置為已訪問節點以及在每次迭代后重置哪些節點變得很麻煩。

提前致謝!

您可以使用廣度優先搜索。 對於每個頂點,請跟蹤:

  • u到該頂點的最短路徑長度
    • 每當處理給定頂點時,都為尚未設置此屬性的所有鄰居設置此屬性。
    • 這是“已被排隊”標志的兩倍:您最初設置為哨兵值,例如ɴɪʟ或∞,並且僅對任何給定頂點更新一次。 因此,您不需要單獨的標志即可跟蹤訪問的頂點。
  • u到該頂點的最短路徑數
    • 每當處理給定的頂點時,都應為其從u出發的最短路徑長度大於要處理的頂點的最短路徑長度的所有鄰居適當增加此屬性。
    • 請注意,對於某些頂點,您將多次更新此屬性,但這沒關系,因為每個邊緣僅更新一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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