题目:
给一个矩阵,里面记录着每个人同其他人是否是朋友关系,并且朋友关系具备可传递性。
题目连接: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; } }