朋友圈数量

题目:

给一个矩阵,里面记录着每个人同其他人是否是朋友关系,并且朋友关系具备可传递性。

题目连接:https://leetcode-cn.com/problems/friend-circles/?tdsourcetag=s_pctim_aiomsg

题目分析:

这个题说到底还是自己对递归理解的不深刻,同时为了强行套用以往的深搜的公式。应该以每个人为中心,对他以及认识的朋友进行搜索。以下图为例进行搜索过程的解析。

A的朋友是B,然后以B为中心对B展开搜索,B的朋友有C和D,分别以C和D为中心对C和D进行搜索,C没有朋友搜索结束,而D的朋友是E,继续以E为中心对E展开搜索。

代码如下:

class Solution {
    private void dfs(int[][] M,boolean[] visited,int i){
        
        for(int j = 0;j < M.length;j++){
            if(M[i][j] == 1 && !visited[j]){
                visited[j] = true;
                dfs(M,visited,j);
            }
        }
    }
    public int findCircleNum(int[][] M) {
        int result = 0;
        boolean[] visited = new boolean[M.length];
        // visiited代表的含义是每个人是否被访问过,因为这个是无向图,所以不需要存储互相的访问状态
        for(int i = 0;i < M.length;i++){
            if(!visited[i]){
                dfs(M,visited,i);
                result++;
            }
        }


        return result;
    }
}

  

猜你喜欢

转载自www.cnblogs.com/jihuabai/p/11747600.html