簡體   English   中英

圖遍歷算法的用法

[英]The usage of graph traversal algorithm

我正在閱讀C ++ 4e中的“數據結構和算法”中與圖有關的材料(作者Adam Drozdek)。 在他的圖廣度優先搜索的實現中,偽代碼類似於:

BFS():
    for all vertices u
        num(u) = 0
    edges = null
    i = 1
    while there is a vertex v such that num(v) is 0
        num(v)++
        enqueue(v)
        while queue is not empty
            v = dequeue()
            if num(u) is 0
                num(u) = i++
                enqueue(u)
                attach edge(v,u) to edges
    output edges

基本上,在圖的實現中,我們已經保留了一組所有頂點和一組所有邊。 在BFS中,該算法首先枚舉此集中未訪問的每個頂點以遍歷整個圖形。

我的問題是:由於我們已經將所有頂點存儲在集合中,因此我們可以在不使用BFS算法的情況下遍歷集合以對特定頂點進行操作。 為什么我們需要圖遍歷算法,主要用途是什么?

BFS和DFS有很多用途...
為您提供有關BFS的想法:

  1. 您有一個表示社交網絡的圖,並希望為特定用戶提出朋友建議。 然后,執行BFS。 頂點(人)越近,在好友建議列表中的排名越高。 (如果用戶數量很大,則在3的距離處停止而不在整個圖形上執行BFS是有意義的)。

  2. 解決方案空間搜索。 解決方案空間無限時非常有用。 (請參閱游戲樹

  3. 最短路徑(如果邊緣的權重相同且沒有循環)。 Dijkstra使它適用於可變權重(請參見Dijkstra的算法 )。

例如,當遞歸遍歷樹時,通常隱式使用DFS。

暫無
暫無

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

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