最简单的实现,为了凑软件设计作业。。。没有做优化。
#include <iostream>
#include <cstring>
using namespace std;
//equivalence means deng jia lei
class equivalence
{
protected:
int *parent;
int size;
int find(int cur)const;
public:
equivalence(int num);
virtual ~equivalence();
void merger(int a,int b);//b is a's parent
bool differ(int a,int b);
equivalence(const equivalence ©);//copyconstructor
equivalence &operator=(const equivalence ©);
};
equivalence::equivalence(int num)
{
size=num;
parent=new int[size];
//memset(parent,-1,sizeof(parent));
for(int i=0;i<size;i++)
parent[i]=-1;
}
int equivalence::find(int cur)const
{
while(parent[cur]!=-1)
cur=parent[cur];//to find the root
return cur;
}
equivalence::~equivalence()
{
delete []parent;
}
void equivalence::merger(int a,int b)
{
int root1=find(a);
int root2=find(b);
if(root1!=root2)
parent[root2]=root1;
}
bool equivalence::differ(int a,int b)
{
int root1=find(a);
int root2=find(b);
return root1!=root2;
}
equivalence::equivalence(const equivalence ©)
{
size=copy.size;
parent=new int[size];
for(int i=0;i<size;i++)
{
parent[i]=copy.parent[i];
}
}
equivalence &equivalence::operator=(const equivalence ©)
{
if(this!=©)
{
size=copy.size;
delete []parent;
parent=new int[size];
for(int i=0;i<size;i++)
{
parent[i]=copy.parent[i];
}
}
return *this;
}
int main()
{
equivalence test(10);
test.merger(2,1);
test.merger(3,1);
return 0;
}
本文介绍了一种简单的并查集实现方法,主要用于处理元素间的连接关系判断及合并操作。此实现未进行性能优化,适用于教学演示及初步了解并查集的基本原理。
847

被折叠的 条评论
为什么被折叠?



