您的位置:首页 > 其它

并查集

2016-07-12 15:32 253 查看
并查集可以理解为集合

目前可以实现的功能有,判断两个点是否在同一个集合中,如果不在同一个集合中,把两个点的集合合并成一个。

主要应用于判断是否有环,以及最小生成树中。

代码与思路本身难度不高。

每次都寻找该点的树根,判断两点的树根是否相等即可。

附核心代码:

int p[1005];
//p[x] == x ? 判断是否该点就是树根,注意是双等号
int Find(int x)
{
return (x == p[x] )? x : p[x] = Find(p[x]);
}

void init()
{

for(int i = 1; i <= n; i ++)
{
p[i] = i;
}

int main()
{

scanf("%d%d",&a,&b);

pa = Find(a);
pb = Find(b);

if(pa!= pb)
{

//让两个不同集合的根相互连接
p[pb] = pa;

}
else
{
flag = true;//有环
break;
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 算法 并查集