[dfs]leetcode547:省份数量(medium)(代码)

122 阅读1分钟

题目地址:

leetcode.com/problems/fr…

给定一个无向无权图的邻接矩阵,求该图有多少个连通分量。

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);
            }
        }
    }
}