解法一:并查集
class Solution {
private int[] father;
public int findCircleNum(int[][] isConnected) {
final int N = isConnected.length;
father = new int[N];
for (int i = 0; i < N; ++i) {
father[i] = i;
}
for (int i = 0; i < N; ++i) {
for (int j = i + 1; j < N; ++j) {
if (isConnected[i][j] == 1) {
union(i, j);
}
}
}
int ans = 0;
for (int i = 0; i < N; ++i) {
if (father[i] == i) {
ans++;
}
}
return ans;
}
private void union(int x, int y) {
father[find(x)] = find(y);
}
private int find(int x) {
return father[x] == x ? x : find(father[x]);
}
}