// 初始化,将每个学生看作一个单元素集合,父节点值赋值为-1(表示当前元素即为根节点) for (int i = 0; i < m; i++) { parent[i] = -1; }
// 合并M中所有有关系的元素集合 for (int i = 0; i < m; i++) { for (int j = 0; j < i; j++) { if (M[i][j] == 1) { union(parent, i, j); } } }
// 统计并查集中合并所有有关系的元素后的集合的数量(数量即为结果) for (int i = 0; i < m; i++) { if (parent[i] == -1) { result++; } }
return result; }
// 查找 privateintfind(int[] parent, int x){ if (parent[x] == -1) { return x; } return find(parent, parent[x]); }
// 合并 privatevoidunion(int[] parent, int a, int b){ int rootA = find(parent, a); int rootB = find(parent, b); if (rootA != rootB) { parent[rootA] = rootB; } }