解法一:并查集
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]); }}