并查集,这种数据结构在使用的时候,最大的作用是用来检查一个图中是否存在一个环。
首先看一个图
我们一看就知道这个图有环路,但是并查集是怎么做的呢?
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,即: