数据结构——树的应用并查集

定义

一种简单的几何表示:一个集合有若干个元素,该集合也被划分成若干个子集。通常用树的双亲表示法(用数组存放每个结点的元素,用伪指针存储该结点双亲结点的索引)作为并查集的存储结构。

通常用数组元素的下标表示元素名,用根结点的下标代表子集合名,根结点的双亲结点表示负数。

应用

初始化——Initial(s)

功能:将集合$S$的每个元素都初始化为只有一个单元素的子集合。

并——Union(S, Root1, Root2)

功能:把集合$S$中的子集合(互不相交)$Root2$并入子集合$Root1$。

查——Find(S,x)

查找集合$S$中单元素$x$所在子集合,并返回该子集合的名字。

例子

$S_0={0},S_1={1},S_2={2},S_3={3},S_4={04},$

$S_5={5},S_6={6},S_7={7},S_8={8},S_9={9}。$

$S_0={0,6,7,8},S_1={1,4,9},S_2={2,3,5}$

语言实现

Initial()

1
2
3
4
5
6
7
8
#define SIZE 100
int UFSet[SIZE];

void Initial(int S[]){ // 初始化每个元素为子集合
for(int i=0;i<size;++i){
S[i]=-1; // 将双亲结点的下标修改为-1
}
}

Find()

1
2
3
4
5
int Find(int S[], int x){
while(S[x]>=0) // 双亲指针不断向上查找
x=S[x];
return x; // 返回该元素所在的根结点的数组下标
}

Union()

1
2
3
void Union(int S[], int Root1, int Root2){
S[Root2]=Root1;
}

-------------本文结束 感谢您的阅读-------------

本文标题:数据结构——树的应用并查集

文章作者:善雯

发布时间:2020年06月05日 - 14:06

最后更新:2020年06月06日 - 13:06

原始链接:http://shanwenyang.github.io/2020/06/05/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-%E6%A0%91%E7%9A%84%E5%BA%94%E7%94%A8%E5%B9%B6%E6%9F%A5%E9%9B%86/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

原创技术分享,您的支持将鼓励我继续创作
0%