《資料結構》並查集與樹

2022-09-10 09:00:13 字數 709 閱讀 1871

查:給定乙個元素,查詢它在哪個集合內

並:合併兩個元素所在的集合

元素-->結點

集合-->樹

多個集合-->森林

用樹的根節點作為不同樹的標誌

合併時只需要將根節點鏈結

用陣列表示樹,陣列下標表示元素值,陣列的值表示該元素對應的父親結點

father[i] = j : 元素i的父親結點是j

對於根節點 father[i] = i

圖中有兩個集合,由兩個樹表示,根節點分別為元素2,3

查詢元素4:

合併元素4,0所在集合:

#includeconst int maxn = 10;

int father[maxn];

void init(int n)

int find(int x)

void union(int x1, int x2)

有時路徑過長會導致find函式內部的while迴圈要執行很多次才能找到根節點

查詢0時需要執行多次while迴圈

對find函式進行改進

int find(int x)

return x;

}

壓縮後:

資料結構之樹(並查集)

0,2,4,6,8的標籤為0。1,3,5,7,9的標籤為1。標籤為0和1表示兩個不同的集合。查詢元素p所對應的集合編號,o 1 複雜度 private intfind int p 檢視元素p和元素q是否所屬乙個集合,o 1 複雜度 public boolean isconnected int p,i...

資料結構簡記 樹與森林 並查集

並查集 union find sets typedef struct ptnode ptnode typedef struct ptree 樹的雙親儲存結構型別typedef struct childnode childnode 孩子在鍊錶中結點型別 typedef struct pctreenod...

資料結構 並查集

並查集,顧名思義,合併 查詢 集合 並查集是一種樹型的資料結構,用於處理一些不相交集合 disjoint sets 的合併及查詢問題。常常在使用中以森林來表示。對於概念等等的這裡不再贅述,直接講解應用。應用1 判斷圖中有多少聯通分量 或者圖是否聯通 聯通分量 1 hdu 1213 應用2 判斷圖是否...