并查集-用并查集判断图中是否有环(能够应用到kruskal的最小生成树)

本文介绍了并查集的概念及其在判断图中是否存在环的应用。通过建立并查集,可以高效地合并节点集合,并通过查找确定节点间的关系。文中详细解释了如何选择合并时的根节点以保持树的高度平衡,并提供了查找和合并的基本代码。通过一个实例展示了如何利用并查集检测图中的环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     先不介绍并查集的概念,先从它的应用说起吧,它有两个功能,第一就是判断给定的一个节点是否属于某一个集合,更确切的说是属于哪个集合。第二个功能就是合并两个集合。

      给定一组数据,如:1, 2, 3, 4, 5, 6, 7, 8,  9,他们是一个大的集合,但是也可以将他们每一个数字看成一个独立的集合,然后我们通过合并来形成一个由他们所有组成的大集合。有的人很奇怪,他们已经是一个集合了,为什么还要重新把他们组织起来呢,而且如果要查找某一个元素我们直接遍历这个集合不就可以了吗,时间复杂度是线性的。熟悉并查集的人可能会马上说出:利用并查集的两种操作:并和查,我们就能够重新组织这些数字,当他们有一定的逻辑,在查找和合并的时候都能够在小于线性的时间内完成。用什么表示并查集呢,我们应用树的表示形式,但是我们不创建树的节点,而是应用一个parent数字来表示当前索引为index的元素的祖先是谁。

    上述的例子: i = 1, 2, ..., 9, parent[i] = i, 说明对于拥有单个元素的集合来说,它的根就是它本身,接下来遍历一遍数组,建立并查集:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值