#4 集合关系

发布于 2024-11-29  589 次阅读



一、并查集
(一)定义
并查集是一种使用树型结构来表示集合关系的数据结构。
(二)基本操作
查:Find(S[],x)
并:Union(S[],root1,root2)
(三)存储结构
1、基本实现
并查集的实现可以使用树的实现方式。

typedef struct{
    ElemType data;
    int parent;
}PTNode;
typedef struct{
    PTNode nodes[MaxSize];
    int Length;
}PTree;

2、基本操作
(1)初始化

void Initial(int S[]){
    for(int i=0;i<Length;i++)
    {
        S[i]=-1;
    }
}

(2)查

int Find(int S[],int x){
    int root=x;
    while(S[root]>=0)
    {
        root=S[root];
    }
    while(x!=root)
    {
        int t=S[x];
        S[x]=root;
        x=t;
    }
    return root;
}

(3)并

bool Union(int S[],int Root1,int Root2){
    if(Root1==Root2)
    {
        return false;
    }
    if(S[Root1]>S[Root2])
    {
        S[Root1]+=S[Root2];
        S[Root2]=Root1;
    }
    else
    {
        S[Root2]+=S[Root1];
        S[Root1]=Root2;
    }
    return true;
}

学习是一段漫长的旅途