public int findCircleNum(int[][] m) {
int res = 0;
int[] mark = new int[m.length];
for(int i = 0; i < m.length; i++) {
if(mark[i] == 0) {
DFS(i, m, mark);
res++;
}
}
return res;
}
public void DFS(int i, int[][] m, int[] mark) {
mark[i] = 1;
for(int j = 0; j < m[i].length; j++) {
if(mark[j] == 0 && m[i][j] == 1) {
DFS(j, m, mark);
}
}
}
本题的关键点:
1.本题可以转化成图的深度优先搜索,即这个矩阵其实就是图的邻接矩阵;
2.关于邻接矩阵的深度优先搜索,可以用一个mark数组来标记已访问节点。当一次深度优先搜索结束后,一个朋友圈也就搜索完毕,所以此时res++。