集合的定义与并查操作(C语言)

Posted Wecccccccc

tags:

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

#define MAXN 1000                  /* 集合最大元素个数 */
typedef int ElementType;           /* 默认元素可以用非负整数表示 */
typedef int SetName;               /* 默认用根结点的下标作为集合名称 */
typedef ElementType SetType[MAXN]; /* 假设集合元素下标从0开始 */

void Union( SetType S, SetName Root1, SetName Root2 )
{ /* 这里默认Root1和Root2是不同集合的根结点 */
    /* 保证小集合并入大集合 */
    if ( S[Root2] < S[Root1] ) { /* 如果集合2比较大 */
        S[Root2] += S[Root1];     /* 集合1并入集合2  */
        S[Root1] = Root2;
    }
    else {                         /* 如果集合1比较大 */
        S[Root1] += S[Root2];     /* 集合2并入集合1  */
        S[Root2] = Root1;
    }
}

SetName Find( SetType S, ElementType X )
{ /* 默认集合元素全部初始化为-1 */
    if ( S[X] < 0 ) /* 找到集合的根 */
        return X;
    else
        return S[X] = Find( S, S[X] ); /* 路径压缩 */
}

以上是关于集合的定义与并查操作(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

集合的定义与并查操作

大力飞砖之DFS与并查集(中-下)

3.19 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题

wenbao与并查集

Restructuring Company和Almost Union-Find 并查集的区间合并与并查集的删除

wenbao与并查集(关于成环与联通)