1 最小生成樹
生成樹:圖有n個結點,用n-1條邊連接起來。
最小生成樹:代價最小的生成樹。
1.1 普里姆算法(Prim)
點擴展:有一個集合和其他節點。
剛開始,起點在這個集合中,找到到這個集合的最短距離的節點,將這個節點併入這個集合,以此類推直至將所有節點併入這個集合。此集合即最小生成樹。例子如《大話數據結構》P250圖7-6-6.
對稠密圖有優勢。
1.2 克魯斯卡爾算法(Kruskal)
邊擴展:有一個鄰接矩陣,存儲每條邊的權值。
按照邊的權值順序將各個節點連接(當形成環時跳過本次連接),以此類推直至將所有節點併入這個集合。此集合即最小生成樹。例子如《大話數據結構》P254-P256.
對稀疏圖有優勢。
2 最短路徑
最短路徑:圖中兩個節點權值和最少的路徑。
2.1 迪傑斯特拉算法(Dijkstra)
點擴展:有一個集合和其他節點。
通過不斷選擇距離起點最近的頂點,基於已求出的最短路徑,求得更遠的頂點的最短路徑,直到覆蓋圖中所有頂點。有點像Prim算法,但不同之處在於Prim算法計算的是已訪問集合到未訪問集合中各點的距離;Dijkstra算法計算的是源點到未訪問集合中各點的距離。
2.2 弗洛伊德算法(Floyd)
https://blog.csdn.net/Harington/article/details/81982299