介面的主要內容如下:
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建立了動態連通圖後,就能夠...