乙個有 n 個結點的連通圖的生成樹是原圖的極小連通子圖,且包含原圖中的所有 n 個結點,並且有保持圖連通的最少的邊。最小生成樹可以用kruskal(克魯斯卡爾)演算法或prim(普里姆)演算法求出。
在一給定的無向圖g = (v, e) 中,(u, v) 代表連線頂點 u 與頂點 v 的邊(即),而 w(u, v) 代表此邊的權重,若存在 t 為 e 的子集(即)且為無迴圈圖,使得的 w(t) 最小,則此 t 為 g 的最小生成樹。
最小生成樹其實是最小權重生成樹的簡稱。
例如:要在n個城市之間鋪設光纜,主要目標是要使這 n 個城市的任意兩個之間都可以通訊,但鋪設光纜的費用很高,且各個城市之間鋪設光纜的費用不同,因此另乙個目標是要使鋪設光纜的總費用最低。這就需要找到帶權的最小生成樹。
我們首先看我們的無向圖 , 需要找到乙個最小權重生成樹
其基本思想就是把每條邊都拿出來, 然後按照權重排序, 將這些邊組合起來, 要求的是組合過程中不可以形成環, 形成環則放棄這條邊
基本實現就是這個了, 打錯的是不符合要求的. 到最後就會形成最小權重生成樹
其基本思想就比較麻煩, 我們先看一張圖
這裡有四行資料,
第一行各個節點.
第二行是節點是否被選中
第三行是節點與父親節點之間的距離(權重) , 比如 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為止.
這個思路就是我上述講的.
最小生成樹演算法
由帶權的連通圖生成的數的各邊加起來稱為生成樹的權,把權值最小的生成樹稱為最小生成樹 minimum spanning tree 簡稱為mst 構造最小生成樹的方法就是利用mst性質,一條一條地選擇可以加入的邊。下面介紹兩種用於構造最小生成樹的演算法,其中第一種演算法稱為prim演算法,第二種演算法稱...
最小生成樹演算法
乙個最簡單的最小生成樹 圖結構練習 最小生成樹 time limit 1000ms memory limit 65536k 有n個城市,其中有些城市之間可以修建公路,修建不同的公路費用是不同的。現在我們想知道,最少花多少錢修公路可以將所有的城市連在一起,使在任意一城市出發,可以到達其他任意的城市。輸...
演算法 最小生成樹
前言 最小生成樹是在乙個給定的無向圖中求一棵樹,這棵樹包含無向圖中的所有頂點,且樹中的邊都來自無向圖中的邊,並且要滿足整棵樹的邊權之和最小。1 最小生成樹是樹,其邊數等於頂點數減1,且不會有環 2 對於給定的圖最小生成樹可以不唯一,但是邊權之和一定是唯一的。3 其根節點可以是這棵樹上的任何乙個節點,...