最小生成樹的特徵
樹的特徵:
1.無迴路
2.v個頂點有v-1條邊
生成樹的特徵:
1.包含樹的所有頂點
2.v-1條邊都在圖里
最小:邊的權重和最小
每次找到樹外面的邊權值最小的結點;
將該結點加入樹內;
關鍵點
找結點時需要同時滿足
1.只能用圖里已有的邊連線結點
2.只能正好用掉v-1條邊
3.加入新的結點後不能有迴路出現
解決辦法
如何判斷結點是否收錄進樹中:收錄後的結點與樹的距離為0,並更新周圍結點距離;
每次都抓樹外的結點進來,所以不會出現迴路;
若沒有用掉v-1條邊,說明該圖不連通,無最小生成樹;
構建**
鄰接矩陣儲存
1.找到與樹相連的邊權值最小的結點
vertex findmindist
( mgraph graph, weighttype dist)
}if(mindist < infinity)
/* 若找到最小dist */
return minv;
/* 返回對應的頂點下標 */
else
return error;
/* 若這樣的頂點不存在,返回-1作為標記 */
}
2.prim函式
int
prim
( mgraph graph, lgraph mst )
totalweight =0;
/* 初始化權重和 */
vcount =0;
/* 初始化收錄的頂點數 */
/* 建立包含所有頂點但沒有邊的圖。注意用鄰接表版本 */
mst =
creategraph
(graph-
>nv)
; e =
(edge)
malloc
(sizeof
(struct enode));
/* 建立空的邊結點 */
/* 將初始點0收錄進mst */
dist[0]
=0; vcount ++
; parent[0]
=-1;
/* 當前樹根是0 */
while(1
)}}/* while結束*/
if( vcount < graph-
>nv )
/* mst中收的頂點不到|v|個 */
totalweight = error;
return totalweight;
/* 演算法執行完畢,返回最小權重和或錯誤標記 */
}
最小生成樹(prim演算法)
最小生成樹是資料結構中圖的一種重要應用,它的要求是從乙個帶權無向完全圖中選擇n 1條邊並使這個圖仍然連通 也即得到了一棵生成樹 同時還要考慮使樹的權最小。prim演算法要點 設圖g v,e 其生成樹的頂點集合為u。把v0放入u。在所有u u,v v u的邊 u,v e中找一條最小權值的邊,加入生成樹...
最小生成樹 Prim演算法
prim 演算法 以領接矩陣儲存 圖g bool b i 表示頂點i是否被訪問,初始化時候memset b,false,sizeof b b 0 value,表示從第0個節點開始。用value i 表示節點i到最小生成樹a中定點的最小距離。例如value 1 a 0 1 int sum記錄權值和 i...
最小生成樹 prim 演算法
一 演算法描述 假設存在連通帶權圖g v,e 其中最小生成樹為t,首先從圖中隨意選擇一點s屬於v作為起始點,並將其標記後加入集合u 中。然後演算法重複執行操作為在所有v屬於u,u屬於v u的邊 v0,u0 屬於e中找一條代價最小的邊並加入集合t,同時將u0併入u,直到u v為止。這是,t中必有n 1...