学历网站怎么做,河南省级建设主管部门网站,服装公司网站,彩票网站开发软件班上有 N 名学生。其中有些人是朋友#xff0c;有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友#xff0c;B 是 C 的朋友#xff0c;那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈#xff0c;是指所有朋友的集合。
给定一个 N * N 的矩阵 M#xff0c;表…班上有 N 名学生。其中有些人是朋友有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友B 是 C 的朋友那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈是指所有朋友的集合。
给定一个 N * N 的矩阵 M表示班级中学生之间的朋友关系。如果M[i][j] 1表示已知第 i 个和 j 个学生互为朋友关系否则为不知道。你必须输出所有学生中的已知的朋友圈总数。
示例 1
输入 [[1,1,0], [1,1,0], [0,0,1]] 输出2 解释已知学生 0 和学生 1 互为朋友他们在一个朋友圈。 第2个学生自己在一个朋友圈。所以返回 2 。
代码
class Solution {int[] fa;public void init()//并查集的操作{for(int i0;ifa.length;i)fa[i]i;}public int find(int x){if(x!fa[x])fa[x]find(fa[x]);return fa[x];}public void union(int x,int y){xfind(x);yfind(y);if(xy) return;fa[x]y;}public int findCircleNum(int[][] M) {int nM.length,res0;fanew int[n];init();for(int i0;in;i)//构建集合for(int j0;jn;j){if(ij) continue;if(M[i][j]1)union(i,j);}SetInteger setnew HashSet();for(int i0;in;i)//查找不相交的集合{int fxfind(i);if(!set.contains(fx)){set.add(fx);res;} }return res;}
}