并查集

并查集通常用来判断一组数据里面的包含关系,因此核心就是find()以及merge()两个功能

 

int box[10005];

void initial(int limit)
{
    for(int i=0;i<=limit;++i)
    {
        box[i]=i;                       //初始化
    }
}

int find(int index)
{
    if(box[index]==index)
    {
        return index;
    }
    else
    {
        box[index]=find(box[index]);     // 路径压缩,提高每一个节点寻找祖宗的速度 
        return box[index];
    }
}

void merge(int x,int y)
{
    int getx=find(x);
    int gety=find(y);
    if(getx!=gety)
    {
        box[gety]=getx;           // 如果不是同一个祖宗,则统一将左边设为右边的祖宗 
    }
}

 

posted @ 2019-01-11 17:24  KachunYip  阅读(148)  评论(0编辑  收藏  举报