10
A
回答
21
假設你需要從src到dest。
每個頂點x關聯兩個值count和val,count是從src到x的最短路徑的數量,val是從src到x的最短距離。還維護一個訪問變量,告訴節點是否第一次到達。
應用通常的BFS算法,
Initialize u = src
visited[u] = 1,val[u] = count[u] = 1
For each child v of u,
if v is not visited
的節點訪問第一次因此它具有從源只有一條路徑到現在經由u,高達V SO最短路徑是高達U 1條+最短路徑,以及數通過最短路徑達到v的方法與count [u]相同,因爲說你有5種方法可以從源頭到達,那麼只有這5種方法可以擴展到v,因爲v第一次遇到u,所以
val[v] = val[u]+1,
count[v] = count[u],
visited[v] = 1
if v is visited
如果v已經被訪問,這意味着有一些其他路徑通過其他v ertices,然後3案件出現了:
1 :if val[v] == val[u]+1
如果當前VAL [V],其通過一些其他路徑是DIST高達v等於VAL [U] 1,即,我們已就使用當前達到,其等於最短距離通過u的路徑和到v的另一個路徑,則到v的最短距離保持相同,但路徑的數量隨着到達u的路徑的數量而增加。
count[v] = count[v]+count[u]
2: val[v] > val[u]+1
如果到達的v的電流路徑比val的先前值的情況下[V],則VAL [V]被存儲的電流路徑和Count [V]也被更新
val[v] = val[u]+1
count[v] = count[u]
第三情況是,如果當前路徑的距離大於以前的路徑,在這種情況下,不需要更改val [v]和count [v]的值。直到BFS完成後,執行此算法。 最後,val [dest]包含距離源的最短距離,count [dest]包含從src到dest的路數。
相關問題
- 1. 圖最短路徑?
- 2. JGraphT圖最短路徑
- 3. 最短路徑
- 4. 最短路徑
- 5. 圖中最短的部分路徑
- 6. 彩色邊圖中的最短路徑
- 7. 優先圖中的最短路徑
- 8. JavaScript中的最短路徑
- 9. Trie中的最短路徑
- 10. 最短路徑不是圖中的路徑
- 11. DAG最短路徑
- 12. 最短路徑C#
- 13. 通過加權圖的最短路徑
- 14. 有向無環圖的最短路徑
- 15. 找到有向圖的最短路徑
- 16. Dijkstra的連通圖最短路徑
- 17. Dijkstra無向圖的最短路徑
- 18. 增量Dijkstra或最短路徑算法?
- 19. 旅行的最短路徑
- 20. Prolog:Knight的最短路徑
- 21. Dijkstra的最短路徑,HackerRank
- 22. 油箱的最短路徑
- 23. Dag的最短路徑
- 24. Neo4j的最短路徑通過指數
- 25. 最短路徑上的變化(複數?)
- 26. 船上數字的最短路徑
- 27. 尋找最短路徑數的算法
- 28. C#圖最短路徑算法
- 29. 自定義地圖最短路徑
- 30. 最短路徑樹索賠(圖)
那麼,當你調用頂點「visited」時,意味着它目前在BFS隊列中?那麼,當它不在隊列中時,我應該在遇到它時跳過它? – 2013-03-05 08:31:08
另外,我在哪裏添加計數值?當我從src頂點的零計數開始時,將一直爲零。 – 2013-03-05 08:47:43
未訪問表示訪問過一次。當時不需要排隊。 對於計數,這是我的錯誤。初始化count [src]爲1,從src到src的路數是1。 – 2013-03-05 10:55:50