并查集的实现

Posted woria

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集的实现相关的知识,希望对你有一定的参考价值。

 1 int par[MAX_N];//每个节点的父节点
 2 int rank[MAX_N];//树的高度
 3 //初始化n个元素
 4 void init(int n) {
 5     for (int i = 0; i < n; i++) {
 6         par[i] = i;//初始时每个节点自成一树
 7         rank[i] = 0;
 8     }
 9 }
10 
11 //查询树的根
12 int find(int x) {
13     if (par[x] = x) {
14         return x;
15     }
16     else {
17         return par[x] = find(par[x]);//递归向上查询,查询到之后直接连到根
18     }
19 }
20 
21 //合并x和y所属的集合
22 void unite(int x, int y) {
23     x = find(x);
24     y = find(y);
25     if (x == y)return;//xy已经在一组
26     if (rank[x] < rank[y]) {    //x的高度小于y,则y作为新的根
27         par[x] = y;
28     }
29     else {
30         par[y] = x;
31         if (rank[x] == rank[y])rank[x]++;//若两树高度相同,则取x为新根,高度+1
32     }
33 }
34 
35 //判断x和y是否属于同一集合
36 bool same(int x, int y) {
37     return find(x) == find(y);//根相同
38 }

 

以上是关于并查集的实现的主要内容,如果未能解决你的问题,请参考以下文章

并查集的原理及实现

❤️数据结构入门❤️(2 - 5)- 并查集

树的应用——并查集及实现代码

并查集的python实现

想要学会并查集吗?看我四十行代码实现它

并查集的Java实现