最小生成樹 kruskal

2022-08-20 13:42:08 字數 754 閱讀 1479

演算法思想:

先構造乙個只含 n 個頂點、而邊集為空的子圖,把子圖中各個頂點看成各棵樹上的根結點,之後,從網的邊集 e 中選取一條權值最的邊,若該條邊的兩個頂點分屬不同的樹,則將其加入子圖,即把兩棵樹合成一棵樹,反之,若該條邊的兩個頂點已落在同一棵樹上,則不可取,而應該取下一條權值最小的邊再試之。依次類推,直到森林中只有一棵樹,也即子圖中含有 n-1 條邊為止。

時間複雜度為為o(e^2), 使用並查集優化後複雜度為

o(eloge),與網中的邊數有關,適用於求邊稀疏的網的最小生成樹。

**:

//

codevs 1231

#include#include

using

namespace

std;

#define size 100005

intn,m;

struct

edgeeg[size];

long

long ans=0

;int

pa[size];

void

init()

int find(int

x)bool query(int x,int

y)void un(int x,int

y)bool

ff(edge a,edge b)

void

kruskal()

}}int

main()

kruskal();

cout

}

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