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

原文:https://www.cnblogs.com/jihuabai/p/11747600.html