最小生成樹之克魯斯卡爾演算法

2021-06-29 01:05:12 字數 470 閱讀 2888

#include"iostream"

#include"algorithm"

using namespace std;

struct edge ;

//用於把所有邊按權重的大小排序

bool comp(const edge& e1, const edge& e2)

/* 使用並查集來判斷兩個點是否在同乙個連通塊中。在每個連通塊中,用乙個節點來代表該塊中的其他節點,

那麼如果兩個節點的代表節點相同,則說明這兩個節點在同

乙個連通塊中,所以如果把這兩個節點的邊加入最小生成樹中,

則會形成環路

*/int find(int e, int n)

return n;

}//e是按權值大小從小到大排好序了

void fun(edge e, int n)

}}int main()

最小生成樹 克魯斯卡爾演算法

c node.h檔案 儲存頂點資訊 class c node c node c node c node p node c node c node c node c node char p data node.h檔案,儲存邊資訊 include class link node link node li...

最小生成樹( 克魯斯卡爾演算法)

name author date 01 12 14 20 17 description 最小生成樹 克魯斯卡爾演算法 關於並查集的演算法,參見 一種簡單而有趣的資料結構 並查集 include include define maxn 1000 最大頂點數量 define max 20000 最大邊數...

最小生成樹 克魯斯卡爾演算法

之前學了用普里姆演算法來求最小生成樹的權值和,但是它的時間複雜度為o v2 使用優先順序佇列優化後,可以優化為o e log v 克魯斯卡爾演算法可以在o e log e 的時間複雜度內,求出最小生成樹 克魯斯卡爾演算法的核心就是對邊進行公升序排序,然後從權值最小的邊開始,加入最小生成樹中,然後利用...