对于一组数据,当要求我们检查某两个数据是否在同一集合内时,就需要并查集去实现了
如:<a,b>,<b,c>,那么很明显a、b、c都在同一集合内
实现思路:
如果我们先将输入的a、b指向自己,再将a指向b,即a令父亲为b
那么:
![](https://i-blog.csdnimg.cn/blog_migrate/4dc4b8ce3ccafa9243cec664e838b5ef.png)
当我们再输入b,c后,跟上面一样的操作:
![](https://i-blog.csdnimg.cn/blog_migrate/5a564b6251d47099d8a17273db18b8eb.png)
很明显,我们就可以通过a,b,c是否拥有统一父亲确定是否为同集合了
理解这个思路很简单,那么代码如何实现?
首先,设置两个map
进行数据的存储
var fa map[int]int // 父节点
var cnt map[int]int // 子节点数量
我们需要一个函数来进行查找,某个点的父亲
func find(x int) int {
i, ok := fa[x]
if !ok {
// 如果没有
fa[x] = x
cnt[x] = 0
return x
}
// 当前节点为父节点
if i == x {
return x
} else