克魯斯卡爾演算法依靠兩個輔助陣列parent[ ] 和edges[ ].
parent陣列用於實現並查集操作,即查詢乙個頂點所在集合的根節點,以及將兩個集合合併成為乙個集合。
edges陣列作為圖中邊的集合,其中各個邊按照權值大小公升序排序,這樣克魯斯卡爾演算法只需依次遍歷edges陣列便可依次向樹中
新增乙個當前權值最小的邊,另外借助parent陣列的查詢操作保證加入的邊不會造成環。
1#define maxsize 100;
2 typedef struct
edge; //
邊結構體78
int find(* parent,int a) //
查詢頂點a的所在集合的根結點914
int parent[maxsize]; //
父親頂點陣列 實現並查集操作
15 edge edges[maxedge]; //
邊陣列16
17void
kruskal(mgrahp g)
1830
}31 }
kruskal克魯斯卡爾演算法
給定乙個帶權的無向連通圖,如何選取一棵生成樹,使樹上所有邊上權的總和為最小,這叫最小生成樹.求最小生成樹的演算法 1 克魯斯卡爾演算法 圖的存貯結構採用 邊集陣列 且權值相等的邊在陣列中排列次序可以是任意的.該方法對於邊相對比較多的不是很實用,浪費時間 方法 將圖中邊按其權值由小到大的次序順序選取,...
克魯斯卡爾演算法 Kruskal
克魯斯卡爾 kruskal 演算法是一種按權值的遞增次序選擇合適的邊來構造最小生成樹的方法。假設g v,e 是乙個具有 n 個頂點的帶權連通圖,t u,t e 是g 的最小生成樹,則構造最小生成樹的步驟如下 1 設定 u的初值等於 v 即包含有 g中的全部頂點 te 的初值為空集 即圖 t 中每乙個...
克魯斯卡爾 Kruskal 演算法
設g v,e 是具有n個頂點的連通網,t u,te 是其最小生成樹。初值 u v,te 對g中的邊按權值大小從小到大依次選取。選取權值最小的邊 vi,vj 若邊 vi,vj 加入到te後形成迴路,則捨棄該邊 邊 vi,vj 否則,將該邊併入到te中,即te te 重複 直到te中包含有n 1條邊為止...