Kruskal演算法的並查集實現

2021-07-03 22:27:02 字數 734 閱讀 8960

最小生成樹的kruskal演算法的偽**如下

w[i]為邊的權值,u[i],v[i]分別為邊的端點的下標

mst為最小生成樹的所有邊的結合 n為頂點的個數 m為邊的個數

將邊按權值排序w[0]<=w[1]<=……..<=w[m-1];

初始化每個頂點屬於不同的連通分量;

for(i=0;i

#include 

using

namespace

std;

const

int nmax=200;

const

int mmax=100;

int w[mmax],u[mmax],v[mmax],f[nmax],m,n;

int myfind(int a)

bool cmp(int i,int j)//間接比較函式

for(int i=0;i//每個節點都是單獨的連通分量

f[i]=i;

for(int i=0;i//對r[i]陣列按w[i]從小到大進行排序

for(int i=0;iint j=r[i];//取出邊的下標

int x=myfind(u[j]);//找到邊的左節點所對應的連通子集編號

int y=myfind(v[j]);//找到邊的右節點所對應的連通子集編號

if(x!=y)//如果屬於不同的連同子集則合併他們

}cout

<}

Kruskal 演算法 並查集

需要注意的地方 將所有的邊權從小到大依次排序,按從小到大依次加入邊,每次對加入的邊進行如下操作 1.找出邊的兩點。2.判斷兩點的父親節點是在同乙個集合裡。3.如果不在同乙個集合,在將兩點所在的集合合併 union,且計數器 1 5.當計數器 n 1 總點數 時 停止查詢。此時只有乙個集合,該集合即為...

kruskal 並查集優化

這兩天搞dp搞的快暴了,想學學網路流。拿過算導來一看,最短路還沒整完呢。寫了乙個用並查集優化的kruskal演算法,並查集是用非遞迴的狀態壓縮實現的。詳見 kruskal沒有用堆優化,不是我不想,而是實在不會。所以直接用sort按權值排了下序,時間複雜度o n n logn my code incl...

複習筆記1 用並查集實現 kruskal演算法

並查集實現克魯斯卡爾演算法 輸入 6 表示有m條邊 1 2 6 表示1和2之間有一條邊,權值為6 2 4 1 1 4 2 1 3 1 3 5 4 4 5 3 include include include define max n 100 using namespace std struct nod...