圖論(各種基礎及算法詳解)


基礎概念

G=(V, E)
如果無向圖中從每一個頂點到其他每個頂點都存在一條路徑,則稱該無向圖是連通的(connected)。具有這樣性質的有向圖稱為是強連通的的(strongly connected)。如果有向圖不是強連通的,但它的基礎圖(underlying graph)(也就是其弧上去掉方向說形成的圖)是連通的,那么稱該有向圖是弱連通的(weakly connected)。完全圖(complete graph)是其每一對頂點間都存在一條邊的圖。

存儲表示方式

  1. 鄰接矩陣

    • 使用|V|*|V|的二維數組來表示圖,g[i][j]=1表示定點i到頂點j右邊,0則無。(對於無向圖,二維矩陣是對稱的,對角線都為0)

    • 這種表示方法,查找兩點間是否有邊的復雜度為O(n^2),而且處理邊數較少的圖時效率不高(稀疏矩陣)

  2. 鄰接表

  3. 鄰接多重表(主要用於存儲無向圖)

    對無向圖而言,其鄰接多重表和鄰接表的差別,僅僅在於同一條邊在鄰接表中用兩個結點表示,而在鄰接多重表中只有一個結點。

遍歷(搜索)(可用於判斷無向圖是否連通)(或用於求解連通圖的最小生成樹算法)

  1. 廣度優先搜索

  2. 深度優先搜索

拓撲排序

最短路徑算法

  1. 深度或廣度優先搜索算法(解決單源最短路徑)

  2. Floyd算法

  3. Dijkstra算法

  4. Bellman-Ford算法(解決負權邊,解決單源最短路徑,前幾種方法不能求含負權邊的圖)

網絡流問題

活動網絡

最小生成樹


免責聲明!

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



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