最小生成樹 Kruskal

2021-09-28 15:12:55 字數 519 閱讀 6201

演算法思路非常簡單

用並查集的思想,n個點形成n個集合

對圖中的k條邊按照權重從小到大排序

取一條最小的邊,如果邊的兩個頂點不屬於同一集合,則採用這條邊,同時合併兩個頂點所在的集合

如果兩個頂點屬於同一集合,則會形成迴路,此時該捨棄該邊,繼續尋找下一條

public class kruskal ,,,

,,,};

kruskal(map);

}static class edge

}private static void kruskal(int map) {

int n = map.length;

priorityqueueedges = new priorityqueue<>((comparator.comparingint(o -> o.weight)));

for (int i = 0; i 與prim演算法中用的同一張圖,最後的生成樹也是一樣的(但最小生成樹不一定是唯一的)

最小生成樹-prim 參考

《趣學演算法》

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 這條邊連線...