数据结构考研笔记(十二)——树的应用(并查集)

并查集

并查集:一种简单的集合表示。
通常用树的双亲表示法作为并查集的存储结构。
通常用数组元素的下标代表元素名,用根结点的下标代表子集合名,根结点的双亲结点为负数

Initial(S)
将集合S中的每个元素都初始化为只有一个单元素的子集合。
Union(S, Root1, Root2)
把集合S中的子集合(互不相交) Root2并入子集合Root1.
Find(S, x)
查找集合S中单元素x所在子集合,并返回该子集合的名字。

下面的结点都是根节点,所以双亲结点都是负数
S={0,1,2,3,4,5,6,7,8,9}
S0={0}, S1= {1}, S2 = {2}, S3 = {3}, S4= {4},
S5= {5}, S6= {6}, S7 = {7}, S8= {8}, S9 = {9}
在这里插入图片描述
例题:

  S={0,1,2,3,4,5,6,7,8,9}
  S0={0,6,7,8},       S1={1,4,9},        S2={2,3,5}

解析:S0是根节点,下面有四个子结点(0,6,7,8)所以为 -4 , S1和S2 是根节点下面有三个子结点所以为-3, S4、S5、S6、S7、S8、S9都是子结点所以parent填相应的双亲结点,如S4的双亲结点是s1,表就填1。如下图
在这里插入图片描述

#define SIZE 100
int UFSets [SIZE] ;//双亲结点下标
void Initial (int S[]) {//初始化
	for(int i=0; i<size; i++)
		S[i]=-1;
}
//查找
int Find(int S[]int x){
	while (S [x]>=0)//如果是正数就不是根节点
		x = S[x];
	return x
}
//合并
void Union(int S[],int Root1,int Root2) {
	S [Root2] =Root1 ;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sf9090

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值