一個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的全部 n 個結點,而且有保持圖連通的最少的邊。最小生成樹能夠用kruskal(克魯斯卡爾)算法或prim(普里姆)算法求出。算法
在一給定的無向圖G = (V, E) 中,(u, v) 表明鏈接頂點 u 與頂點 v 的邊(即),而 w(u, v) 表明此邊的權重,若存在 T 爲 E 的子集(即)且爲無循環圖,使得ide
的 w(T) 最小,則此 T 爲 G 的最小生成樹。視頻
最小生成樹實際上是最小權重生成樹的簡稱。對象
例如:要在n個城市之間鋪設光纜,主要目標是要使這 n 個城市的任意兩個之間均可以通訊,但鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不一樣,所以另外一個目標是要使鋪設光纜的總費用最低。這就須要找到帶權的最小生成樹。blog
咱們首先看咱們的無向圖 , 須要找到一個最小權重生成樹排序
其基本思想就是把每條邊都拿出來, 而後按照權重排序, 將這些邊組合起來, 要求的是組合過程當中不能夠造成環, 造成環則放棄這條邊get
基本實現就是這個了, 打錯的是不符合要求的. 到最後就會造成最小權重生成樹it
其基本思想就比較麻煩, 咱們先看一張圖class
這裏有四行數據,循環
第一行各個節點.
第二行是節點是否被選中
第三行是節點與父親節點之間的距離(權重) , 好比 a-b ,若是a被選了,那麼 b的父親就是a,就是這個意思,ab之間的權重就是這個值, 並且b不必定只有一個父親
第四行就是父親節點是誰了
因此開始吧
咱們首先以0位起始位置 , 0標記爲true, 開始往前推動, 0和1,7連着. 0-7=8,0-1=4 , 因此這一次選0-1 , 此時 標記1爲true ,
01節點連着的有 0-7=8,1-7=11,1-2=8 ,此時0-7與1-2相同, 此時選擇父節點小的爲選擇對象 , 此時將7標記爲true.
071 節點連着 1-2=8 , 7-6=1 , 7-8=7 , 因此選擇 7-6 ,標記6爲true , 就一直標記到所有爲true爲止.
這個思路就是我上述講的.
若是你仍是不理解能夠看看這個視頻 , 連接 : https://www.bilibili.com/video/av47042691?from=search&seid=15424121794388295524