第21章:用于不相交集合的数据结构

原创 2016年05月30日 22:22:00

一:不相交集类的声明如下:

#ifndef DISJSETS_H
#define DISJSETS_H
#include <vector>
using namespace std;
class DisjSets{
public:
        explicit DisjSets(int);

        bool isSameSet(int x, int y) const
        { return findSet(x)==findSet(y);}

        int findSet(int) const;
        int findSet(int);

        void unionSets(int,int);
private:
        vector<int> s;
};
#endif

二:不相交集类的实现如下:

#include "DisjSets.h"
DisjSets::DisjSets(int numElements):s(numElements)
{
        for(int i=0;i!=s.size();i++)
                s[i]=-1;
}

int DisjSets::findSet(int x) const
{
        if(s[x]<0)
                return x;
        return findSet(s[x]);
}

int DisjSets::findSet(int x)
{
        if(s[x]<0)
                return x;
        return s[x]=findSet(s[x]);
}

void DisjSets::unionSets(int x,int y)
{
        int root1=findSet(x);
        int root2=findSet(y);

        if(root1==root2)
                return;

        if(s[root2]<s[root1])
                s[root1]=root2;
        else{
                if(s[root2]==s[root1])
                        s[root1]--;
                s[root2]=root1;
        }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法导论 第21章 用于不相交集合的数据结构

一、综述 不相交集合数据结构(disjoint-set data struct)保持一组不相交的动态集合S={S1,S2,……,Sk} 这种数组结构支持三种操作: (1)MAKE-SET(x):...

算法导论代码 第21章 用于不相交集合的数据结构

第21章 用于不相交集合的数据结构 21.2 不相交集体的链表表示 #include #include #include typedef struct set_type *set; stru...

并查集——用于不相交集合的数据结构

并查集 并查集保持一组不相交的动态集合S={S1, S2, ..., SK}.每个集合通过一个代表来表示,代表即集合中的某个成员。 并查集的精髓(即它的三种操作): 集合中的每一个元素是由一个对象表示...

算法导论学习笔记(15)——用于不相交集合的数据结构

用于不相交集合的数据结构 总结:这一章讲了并查集的相关概念,以及主要的MAKE-SET, UNION, FIND-SET操作,并给出了并查集的链表表示和森林表示方式。 1.    不相交集...

[算法导论读书笔记]用于不相交集合的数据结构(并查集)

不相交集合数据结构的概念和操作:     不相交集合数据结构(disjoing-set data structure)保持一组不相交的动态集合S={S1,S2,S3,……Sk}。每个集合通过一个代表...
  • lalor
  • lalor
  • 2012年03月23日 21:11
  • 3583

不相交集合的数据结构

不相交集合的数据结构本来想着来实现基于贪婪思想的Kruskal算法—–最小生成树的算法之一。 却发现当我们合并集合时里面还涉及到一个判断“环”的问题,继而有了本篇博文:不相交集合的数据结构。...

数据结构之不相交集类

不相交集类是解决等价关系问题的一种非常有效的手段!等价关系是一种关系R,他满足自反性,对称性与传递性。有人说散列是最艺术的数据结构,优先队列是最优雅的数据结构 而不相交集类就是最简洁的数据结构!这些说...

数据结构与算法——不相交集类的C++实现

简介: 不相交集类是将一些元素合并为不相交的各个集合。在同一个集合中的元素两两等价,不同集合中的元素不等价。 1.等价关系 等价关系必须满足下面三个性质: (1):自反性,对于集合S中...

用不相交集数据结构生成迷宫

之前提到的不相交集数据结构(:http://blog.csdn.net/zhutulang/article/details/7791804。)的一个应用的例子是迷宫的生成。如下图所示就是一个50*50...

数据结构-不相交集ADT

若对于每一对元素(a,b),a、b属于S,aRb或者为true或者为false,则称在集合S上定义关系R。如果aRb是true,那么我们说a与b有关系。 等价关系是满足下列三个性质的关系R: ...
  • hola_f
  • hola_f
  • 2016年08月21日 16:16
  • 242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第21章:用于不相交集合的数据结构
举报原因:
原因补充:

(最多只允许输入30个字)