演算法 Prim演算法構造最小生成樹

2021-10-04 06:25:19 字數 901 閱讀 5644

基本概念:

生成樹:乙個連通圖的生成樹是它的乙個極小連通子圖

從生成樹的定義可知,乙個連通圖的生成樹含有圖的全部n個頂點和n-1條邊。

最小生成樹(minimal spanning tree):給連通圖的邊附上權值,則其所有權值之和最小的生成樹是最小生成樹。

prim演算法構造最小生成樹:

假設有連通圖g=(v,e),其最小生成樹表示為g』=(u,te)。

從v中選擇乙個頂點v作為起點加入到u中,將v到其他頂點的所有邊作為候選邊(三類:到自身(權值為0)、到鄰接點、到非鄰接點(權值為∞))

重複以下步驟直到其他n-1個頂點加入到u中:

1)從候選邊中選擇最小邊(權值最小),並將其關聯的頂點k加入到u;

2)考查v-u中的所有頂點j,修改候選邊,如果(k,j)的權值小於原來和頂點j關聯的候選邊,則用前者取代後者。

**實現:

void

prim

(matgraph *g,

int v)

for(i=

1; i>n; i++

)printf

("there is a minimal edge (%d,%d), weight:%d\n"

, closest[k]

, k, lowcost[k]);

lowcost[k]=0

;for

(j=0

; j>n; j++)if

(lowcost[j]!=0

&& g-

>edgs[k]

[j]< lowcost[j])}

}

演算法分析:prim演算法用到了兩重迴圈,並且迴圈次數圖的頂點個數有關,因此其時間複雜度為o(n2),而與邊數無關,因此prim演算法特別適合稠密圖求最小生成樹。

prim演算法構造最小生成樹

1.問題 假設g v,e 是連通的,te是g上最小生成樹中邊的集合。演算法從u u0 v te 開始。重複執行下列操作 在所有u u,v v u的邊 u,v e中找一條權值最小的邊 u0,v0 併入集合te中,同時v0併入u,直到v u為止。此時,te中必有n 1條邊,t v,te 為g的最小生成樹...

使用prim演算法構造最小生成樹

對於乙個無向連通圖,若是稠密圖的話 儲存 鄰接矩陣g n n 來儲存圖,n為圖最大的點的數量 dist n 儲存集合外的點到集合的最短距離,s n 即集合s,儲存集合的點,若s i true,則該點在集合,否則不在。演算法 設乙個s集合 圖的點的集合 初始時集合沒有點 步驟 1 從所有點中找距離s集...

最小生成樹(prim演算法)

最小生成樹是資料結構中圖的一種重要應用,它的要求是從乙個帶權無向完全圖中選擇n 1條邊並使這個圖仍然連通 也即得到了一棵生成樹 同時還要考慮使樹的權最小。prim演算法要點 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹...