我是自动化专业的应届研究生,最终拿到了tplink、华为、vivo等公司的ssp的offer,分享自己学习过的计算机基础知识(C语言+操作系统+计算机网络+linux)以及数据结构与算法的相关知识,保证看完让你有所成长。
欢迎关注我,学习资料免费分享给你哦!还有其他超多学习资源,都是我自己学习过的,经过过滤之后的资源,免去你还在因为拥有大量资源不知如何入手的纠结,让你体系化学习。
并查集是一种用来表示集合的数据结构,表示某个元素是否是集合中的一份子,只要有两种操作,一种是查找,找出两个元素a和b是否为同一个集合之中;另一种操作就是合并操作,将两个不在一个集合的元素a和b合并到一个集合中。
为了能够实现这种数据结构,可以使用树,通过判断两个元素a和b的树根是否相同,就可以判断是否是在一个集合之中,通过将b所在的树合并到a所在的树就可以完成两个元素合并到一个集合之中。
我们可以用数组来表示这种树的结构,比如以S为数组名,然后S[a]和S[b]的值就是父节点,当值为-1或者超出数组范围的值用来作为树的根。
初始化为下图所示的集合,每个元素都是自己一个集合。
假如把3和4合并到一个集合,只需把S[4]=3,相当于把4作为了3的一个子节点。
那么查找i节点的所在集合的根的过程就是寻找S[i]是否等于-1,如果等于-1,说明就是i所在集合的根,如果S[i]!=-1,而是等于a,那么就继续寻找S[a]的值,直到等于-1.
int find(int *A,int d)
{
if(A[d]<=0)
{
return d