並查集(UnionFind)介面封裝 C 實現

2021-10-06 18:06:04 字數 704 閱讀 5234

介面的主要內容如下:

1、並查集初始化

2、合併:合併兩棵樹

3、查詢:找某一節點所在樹的根節點

4、連通性判斷:判斷兩個節點是否連通,實質是判斷其根節點是否相同

5、路徑壓縮:降低樹的高度,進而降低查詢的複雜度

6、連通分量個數統計

7、平衡性:使用size統計每棵樹的節點數量,在合併的時候,總是讓重量較小的樹合併到重量較大的樹的下方(即小樹的根節點指向大樹的根節點),避免樹的高度變得不平衡。

#include

using

namespace std;

// 並查集

class

unionfind

}// 返回當前集合中連通分量的個數

intcount()

// 查詢某個連通分量的根節點

intfindroot

(int x)

return x;

}// 判斷兩個分量是否連通

bool

connected

(int p,

int q)

// 合併兩個集合

void

unionset

(int p,

int q)

else

this

->count--;}

};

謝謝閱讀。

並查集路徑壓縮 並查集 UnionFind 入門

咳咳,剛看完海賊更新,馬上呼哧呼哧寫下這篇文章,這週的目標就是出一篇並查集相關的文章,真的是時間咻咻一下就沒了。本文閱讀大概需要3分鐘。好了,並查集呢,英文叫union find 並查集是一種樹型的資料結構,通常來用於處理一些不相交集合的合併 union 問題,以及查詢 find 問題。如下 1 有...

演算法合集 並查集union find

並查集演算法主要分為quic find,quick union以及union find方法。但出於效率考慮,一般使用union find演算法進行實際操作。union find演算法的思想就是利用乙個陣列id記錄每個節點的父節點,例如現要將節點1 id 1 1 連線到節點2 id 2 2 則令id ...

什麼是Union Find 並查集 ?

並查集是一種屬性資料結構 用於處理一些不交集disjoint sets的合併以及查詢問題。但是光這麼說也太他媽抽象了。不如看兩個應用場景 網路連線判斷 如果每個pair中的兩個整數分別代表乙個網路節點,那麼該pair就是用來表示這兩個節點是需要連通的。那麼為所有的pairs建立了動態連通圖後,就能夠...