摘要:
不相交集合数据结构保持一组不相交的动态集合,集合中每一个元素有一个对象表示,或称其为代表。其主要操作有三个,
Make_Set(x) ; 对集合x进行初始化,每一个元素就是一个对象。
Union(X,Y) ; 将包含集合X,Y的动态集合合并为一个新的集合;
Find_Set(x) ; 返回包含x的集合的代表;
不相交集合的一个应用,确定无向连通图中的连通子图的个数。可以采用链表形式,数组形式,和有根树的方式表示。
基本过程是 Connected_Components (G) //G 表示无向图
Connected_Components (G)
{
for each vertex v ∈ V(G); // V(G) 表示G中的所有点定点
do Make_Set(v);
for each edge(u,v)∈ E(G); //E(G) 表示G中的所有边
do if(Find_Set(u) != Find_Set(v))
then Union(u,v);
} 阅读全文