圖-最小生成樹(聯通網的最小代價生成樹)
(有規律的連續訪問多個頂點的需求)
假設你是電信實施工程師,需要為一個鎮的九個村莊架設通信網絡做設計,村與村之間的距離就是邊的權重,領導要求用最小成本完成任務,你該怎么做???
- 最小生成樹也就是最小權重生成樹
- n個頂點擁有n-1條邊(想想樹的節點個數),使得所有頂點之間都有路徑可達
- n個節點之間不能構成回路
重要!!!
Prim算法/普里姆算法
原理:對于圖G=(V,E),用Prim算法求最小生成樹T=(S,TE)的流程如下:
- 初始化:設S、TE為空集,任選頂點k加入S
- 選取一條權值最小的邊(X,Y), 其中X
選取一條權值最小的、連接著S中一頂點和S外一頂點的邊
- 重復步驟2,直到所有頂點都在S中
Kruskal算法
原理:圖G=(V,E)
- 最小生成樹T=(S,TE)
- 將G中的所有邊按照權重進行升序排序,從小到大加入最小生成樹
- 如果將選中的邊加入TE后,TE不會形成環(回路),則加入,否則丟棄
- 重復步驟3,直到所有頂點都在S中
圖形推演

總結
可以從圖中看到,兩種算法最后生成的最小生成樹是一樣的