题目地址:
给定一个无向无权图的邻接矩阵,求该图有多少个连通分量。
DFS。用DFS将连通块标记为访问过,然后累加连通块的个数即可。代码如下:
public class Solution {
public int findCircleNum(int[][] M) {
if (M == null || M.length == 0 || M[0].length == 0) {
return 0;
}
int res = 0;
// 标记顶点为
boolean[] visited = new boolean[M.length];
for (int i = 0; i < M.length; i++) {
if (!visited[i]) {
dfs(i, M, visited);
// 将连通块遍历完后累加连通块数量
res++;
}
}
return res;
}
// 从图的顶点cur开始进行DFS,同时将所有访问过的点标记为访问过
private void dfs(int cur, int[][] M, boolean[] visited) {
visited[cur] = true;
for (int i = 0; i < M[cur].length; i++) {
if (M[cur][i] == 1 && !visited[i]) {
dfs(i, M, visited);
}
}
}
}