演算法思想:
1.先選擇乙個頂點作為樹的根節點,把這個根節點當成一棵樹
2.選擇圖中距離這棵樹最近但是沒有被樹收錄的乙個頂點,把他收錄在樹中,並且保證不構成迴路
3.按照這樣的方法,把所有的圖的頂點一一收錄進樹中。
4.如果沒有頂點可以收錄
a.如果圖中的頂點數量等於樹的頂點數量-->最小生成樹構造完成
b. 如果圖中的頂點數量不等於樹的頂點數量-->此圖不連通
dist:距離當前生成樹的最小距離。和根節點直接相鄰的初始化為權重,其他的初始化為正無窮。等每插入乙個樹節點,對dist進行更新。對於已經收錄的節點,更新其dist=0
//prim演算法偽**:
//dist:距離當前生成樹的最小距離。和根節點直接相鄰的初始化為權重,其他的初始化為正無窮。等每插入乙個樹節點,對dist進行更新。對於已經收錄的節點,更新其dist=0
void
prim()
;while(1
)}if( mst中收的頂點不到|v|個 )
error ( 「生成樹不存在」 )
;}
演算法思想:
在不構成迴路的情況下,每次選取權最小的邊,直到去到v-1條邊為止。
//kruskal演算法偽**
void kruskal ( graph g )
;while
( mst 中不到 |v|
-1 條邊 && e 中還有邊 )}if
( mst 中不到 |v|
-1 條邊 )
error ( 「生成樹不存在」 )
;}
prim演算法實現
kruskal演算法實現
**例子為本文中的圖所構造
最小生成樹 Prim演算法與Kruskal演算法
乙個連通圖的生成樹是乙個極小的連通子圖,包含有圖中全部的頂點,但只有足以構成一棵樹的n 1條邊。我們把構造連通網的最小代價生成樹稱為最小生成樹 mi nimu mcos tspa nnin gtre e minimum cost spanning tree minim umco stsp anni ...
Prim演算法 Kruskal演算法
一 prim演算法 1 要求 1 生成一顆連通的樹 2 生成樹 包含全部頂點,v 1條邊,沒有迴路,並且新增一條邊會變成有迴路 3 權重和最小 2 過程模擬 最重要 貪心的思想,每一步都要選擇權值最小的,這棵樹所有跟頂點相連的邊中最小的。從根節點開始,讓樹慢慢的長大。過程 從v1開始 跟v1有聯絡的...
Prim演算法 Kruskal演算法
prim演算法 kruskal演算法 prim演算法和kruskal演算法,都是用來找出圖中最小生成樹的演算法,兩個演算法有些小差別。prim演算法 又稱普里姆演算法,以圖上的頂點為出發點,逐次選擇到最小生成樹頂點集距離最短的頂點為最小生成樹的頂點,並加入到該頂點集,直到包含所有的頂點。1.選擇一出...