题目会给出一个n*n二维数组,表示n个人之间的朋友关系。1为互为朋友,0为不是朋友。现在我们要找出朋友圈的最大数目。
这道题用到DFS算法。我们用一个循环,从第一个人开始找,用深度优先搜索找出和他有朋友关系的人,形成一个朋友圈,然后给他们都打上标签,表示我们已经遍历过他们,下一次循环不再遍历他们。然后循环找到下一个没有遍历过的人,从他开始构建一个朋友圈,直到所有人被遍历。
代码如下:
class Solution {
public int findCircleNum(int[][] M) {
Boolean visited[] = new Boolean[M.length];
for (int i = 0; i < M.length; i++) {
visited[i] = false;
}
int count = 0;
for (int i = 0; i < M.length; i++) {
if (!visited[i]) {
count++;
dfs(M, visited, i);
}
}
return count;
}
public void dfs(int[][] M, Boolean[] visited, int i) {
for (int j = 0; j < M.length; j++) {
if (M[i][j] == 1 && visited[j] == false) {
visited[j] = true;
dfs(M, visited, j);
}
}
}
}