并查集常常用来判断在一个图中是否存在回路(是否可以生成树),以及用来判断图的联通性问题。
这里介绍并查集的一种简单且使用较多的一种实现方法——快速union,快速find,基于重量的并查集实现方法。
首先,需要两个数组——parent[] 与weight[] ,parent用来存放该节点的父节点,weight用来存放该节点有多少的子节点,也就是该节点的“重量”。
其次,需要一个整数nums来记录一共有多少个不相连的集合
并查集有三个基本的方法:init() , find() , union() 。init()用来对数组进行初始化,find()用来查找对应节点的根节点,union()用来连接节点。
1,init() 初始化
初始化时,每个节点的父节点都是他自身。每个节点对应的重量均为1,nums为集合中节点的数量,代码如下:
void init() { for(int i = 0 ; i < parent.length ; i ++) { parent[i] = i ; weight[i] = 1 ; } nums = parent,length ; }