算法思想
用集合中的某个元素来代表这个集合,,该元素称之为集合的代表元
每个集合可以理解为一个树,对于集合中的每个元素(如x),都有一个值(如parent[x])指向其在结构上的父节点。如果x为集合的代表元,即根节点,则令parent[x]=x;
对于查找操作,假设需要确定x所在的的集合,也就是确定集合的代表元。可以沿着parent[x]不断在树形结构中向上移动,直到到达根节点。
判断两个元素是否属于同一集合,只需要看他们的代表元是否相同即可。
并查集的三个操作
- 初始化
- 查找
- 合并集合
初始化
包括对所有单个的数据建立一个单独的集合(即根据题目的意思自己建立的最多可能有的集合,为下面的合并查找操作提供操作对象)
结构体表示法
#define MAX 10000
struct Node
{
int parent; // 集合index的类别
int data; // 集合index的数据类型
int rank; // 集合index的层