超详细的并查集入门

本文介绍了并查集这一数据结构,用于检测图中是否存在环。通过选取边将点归入同一集合,当两个点属于同一集合时,可判断存在环。文章详细解释了并查集的树形表示、根节点查找、合并树的操作,并针对合并过程中可能导致的效率问题提出了路径压缩优化。还提供了Java和C语言的代码实现,并推荐了相关学习资源。
摘要由CSDN通过智能技术生成

并查集,这种数据结构在使用的时候,最大的作用是用来检查一个图中是否存在一个环。

首先看一个图

我们一看就知道这个图有环路,但是并查集是怎么做的呢?

1、首先我们取任意边,假设我们选取了0-1这条边,则我们可以把0,1两个点放在同一个集合中

2、接下来,我们选取1-2这条边,我们发现,1这个点已经在0,1这个集合中,所以我们把2这个点也放到0,1集合中,代表着0,1,2是连起来的

 3、现在,我们再找一条边,假设找到3-4,我们将3,4放在一个集合中

4、下面我们再找一条边,假设找到1-3这条边,我们发现,1点在0,1,2集合中,而3点在3,4集合中,这个时候我们就要把两个集合合并

 5、合并之后,我们发现0,1,2,3,4点都在一个集合中,而图上未使用的边还有2-4,2-5,假设我们选择了2-4这条边,我们发现2点和4点都在0,1,2,3,4集合中,这个时候,我们将2-4这条边连上,就可以发现图中存在环路了

所以并查集的思想就是,当选中的两个点在同一个集合中时,我们就可以断定,这个图存在环

 

下面我们就要把这种思路用代码表示出来

对于上面所说的集合,我们可以用树来表示一个集合,假如是0,1,2集合,我们可以想象成一颗树,3,4集合我们也可以想象成一棵树

 我们可以用一个数组来表示一棵树,我们定义一个parent数组,将其初始值全部赋值为-1

当我们更改parent[1]=0时,表示1的父节点为0,即:

 当我们更改parent[2]=0时,表示2的父节点也是0,即:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值