並查集基礎知識

2021-08-10 23:38:16 字數 1110 閱讀 1911

所謂並查集,就是集合,對集合的操作分為兩種:並和查。

下面有兩種實現。

第一種是不進行任何改善的。

第二種是進行改善的。

#include

#include

typedef

int elemnttype;

//採用陣列儲存方式,根的parent為-1.

typedef

struct

settype;

//find

int find(settype s, elemnttype x)

void union(settype s, elementtype x1, elemnttype x2)

#include

#include

using

namespace

std;

#define maxn 1000 /* 集合最大元素個數 */

typedef

int elementtype; /* 預設元素可以用非負整數表示 */

typedef

int setname; /* 預設用根結點的下標作為集合名稱 */

typedef elementtype settype[maxn]; /* 假設集合元素下標從0開始 */

/*按秩歸併,前者是按照規模,後者按照樹高,建議用前者,因為路徑壓縮的時候樹高會發生變化,而進行

路徑壓縮的時候並沒有修改樹高*/

void union(settype s, setname root1, setname root2 ) //s[root]=-元素數

else

}void union(settype s, setname root1, setname root2)//s[root]=-樹高

}setname find(settype s, elementtype x )

//非遞迴查詢

int find(int x)

return r;

}

並查集知識

其實並查集顧名思義就是有 合併集合 和 查詢集合 兩種操作的關於資料結構的一種演算法。並查集演算法不支援分割乙個集合。用集合中的某個元素來代表這個集合,該元素稱為集合的代表元。乙個集合內的所有元素組織成以代表元為根的樹形結構。對於每乙個元素 parent x 指向x在樹形結構上的父親節點。如果x是根...

並查集基礎

並查集問題描述 在一些有n個元素的集合應用問題中,我們通常是在開始時讓每個元素構成乙個單元素的集合,然後按一定順序將屬於同一組的元素所在的集合合併,其間要反覆查詢乙個元素在哪個集合中。這一類問題近幾年來反覆出現在資訊學的國際國內賽題中,其特點是看似並不複雜,但資料量極大,若用正常的資料結構來描述的話...

並查集基礎

並查集的原理 實現與應用 什麼是並查集 如果給出各個元素之間的聯絡,要求將這些元素分成幾個集合,每個集合中的元素直接或間接有聯絡。在這類問題中主要涉及的是對集合的合併和查詢,因此將這種集合稱為並查集。什麼是等價類 在並查集中,同乙個集合中的元素直接或者間接地有聯絡,我們就把這些元素稱為屬於同乙個等價...