圖的BFS與DFS的應用


1. BFS的應用

圖的BFS算法可以用來求從圖中一個頂點到其余各個頂點的最短路徑。如果對圖中每個頂點都使用一次BSF,就可以求出從圖中每個頂點到其余各個頂點的最短路徑。

 

2. DFS的應用

 

2.1 拓撲排序

DFS算法可以用來求一個有向無回路圖的拓撲排序,算法的偽代碼如下:

從偽代碼中可以看出,圖中的各個節點是按完成時間 f 降序順序排序的。然后依次輸出排序后的結果就能得到一個拓撲排序。

 

2.2 找出圖中的所有強聯通分支

DFS算法也可以找出一個有向圖的所有強連通分支。偽代碼如下:

該算法首先調用DFS(G)構造出一個深度優先搜索森林並球出了各個節點的完成時間f[u]。求圖G的矩陣表示的轉置矩陣GT,然后在GT上再次調用DFS(),但是這次不是按隨機順序任意訪問節點,而是按在第一次DFS()中求出的各個節點的f[u]降序順序訪問。這次同樣構造出了一個深度優先搜索森林,其中每一棵深度優先搜索樹就是一個原圖的強連通分支。

讀到這里大家也許會奇怪:為什么這個算法有些詭異?為什么一次DFS搞不定?為什么要計算G的轉置矩陣?為什么第二次DFS要按f[u]的降序排序?

欲知原因,請參見《算法導論》中文版第339頁,有些復雜,不是一兩句話能說明白的。

 

strongly_connected component算法的實現,未完,待續……

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM