Kruskal最小生成樹

2022-02-28 17:12:33 字數 886 閱讀 8683

kruskal演算法似乎更加貼近貪心演算法。

每次都從邊集中找出權值最小的邊,符合條件則組成乙個小的樹。

最終這些小的樹會合併成最後的大樹,也就是我們想要得到的生成樹。

kruskal演算法需要用到兩種資料結構:最小堆、並查集

初始化:

所以節點都是一棵樹,相當於初始化並查集。

將所有邊都加入到最小堆中。

(1)從最小堆中選出乙個權值最小的邊, 將此邊刪除。

如果這個邊的相連的兩個節點在同乙個集合中,

·   continue

如果不在同一集合中,將兩個節點加入到同一集合。

(2)迴圈直到count==n-1 或 最小堆中沒有元素

typedef int

vertex;

typedef

intweight;

typedef

struct

arcnode

arcnode;

typedef

struct

vnode

vnode;

typedef

struct

lgraph

lgraph;

void kruskal(lgraph&g)

}//初始化並查集

intd[g.v];

init(g.v, d);

int count = 0

;

while(count < n-1 && !q.empty())

}}void init(int n, int

d)

}int find(int d, int

a)void union(int d, int a, int

b)

kruskal 最小生成樹

include include 產生隨機數組用 include 同上 include using namespace std 1 帶權邊的類myarc class myarc bool operator const myarc arc myarc myarc int beginvex,int end...

最小生成樹Kruskal

最小生成樹有兩個特點,乙個是保證了所有邊的和是最小值,另乙個是保證了所有邊中的最大值最小。struct edge bool friend operator edge a,edge b 構邊 vectoredge int id max int mini void initial void input ...

最小生成樹(kruskal)

kruskal演算法 1 記graph中有v個頂點,e個邊 2 新建圖graphnew,graphnew中擁有原圖中相同的e個頂點,但沒有邊 3 將原圖graph中所有e個邊按權值從小到大排序 4 迴圈 從權值最小的邊開始遍歷每條邊 直至圖graph中所有的節點都在同乙個連通分量中 if 這條邊連線...