并查集
文章目录 并查集 并查集问题中集合如何存储 实现 并查集 集合的运算 :交、并、补、差和判断一个元素是否属于某一集合。 并查集 :集合的合并、判断一个元素是否属于某一集合的操作。 并查集问题中集合如何存储 可以用树结构表示集合,每棵树代表一个集合,树的每个节点一个集合的元素。例: 怎么更加方便的表示一棵树?答案是用数组。数组元素类型如下: Typedef struct SetNode { ElementType Data ; //存储数据 int Parent ; //存储父节点在数组中的下标;如果本身就是父节点,就用负数表示,负数绝对值的大小可以用来确定这棵树的高度 } SetType ; 例: 表示的集合为: 实现 查找一个元素在哪个集合 int Find ( SetType S [ ] , ElementType X ) { /* 在数组S中查找值为X的元素所属的集合 */ /* MaxSize是全局变量,为数组S的最大长度 */ int i ; for ( i = 0 ; i < MaxSize && S [ i ] . Data != X ; i ++ ) ; if ( i >= MaxSize ) return - 1 ; /* 未找到X,返回-1 */ for ( ; S [ i ] . Parent > 0 ; i = S [ i ] . Parent ) ;