首先我们先来看一个栗子:
朋友圈问题:
1、已知,有n个人和m对好友关系(存于一个集合r中)
2、如果两个人是直接的或者间接的好友(好友的好友的好友。。。),那么他们属于一个集合,就是一个朋友圈里的。
3、写出程序,求这n个人中一共有多少个朋友圈。
例如:
n=5,m=3;
r={
{1,2},{2,3},{4,5}};
因为集合{1,2}和集合{2,3}中有共同的朋友2,所以1,2,3属于同一个朋友圈,4和5与其它集合没有共同元素,所以4和5属于一个朋友圈。
那么怎么解决这个问题呢?
在之前我们学习了哈希表,所以很容易想到用哈希表来解决这个问题,具体解法如下所示:
哈希表虽然可以解决这类问题,但是当关系变得复杂点就十分容易出错,而且实现起来比较复杂,那有没有更好的方法呢,就是今天所要描述的并查集。
1、并查集
并查集是一种树型的数据结构,用于处理一些不相交集合(Disjoint Sets)的合并及查询问题。常常在使用中以森林来表示。并查