假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写出程序求出这n个人里一共有多少朋友圈。
例如:n=5,m=3,r={ {1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友。则1,2,3属于一个朋友圈,4,5属于另一个朋友圈,结果为两个朋友圈。
这道题有很多种解法,首先想到的就是定义一个数组,数组元素也是数组。使用STL库,定义这样的一个结构:
vector<vector<int>> _v;
然后遍历每对好友关系,如果数组中有相同元素(好友),就在当前数组中添加该好友,最后,遍历最外层数组元素个数就可以知道有多少个朋友圈了。
作为小米面试题,它不仅要求正确性还有效率,上面给出的解法也能做出这道题,但是效率太低,所以,在这里,我使用一种更高效,快捷的数据结构-----并查集。
并查集:
并查集是一种树型的