547. Friend Circles

来源:互联网 发布:java物流管理系统源码 编辑:程序博客网 时间:2024/06/05 10:35

题目会给出一个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);}}}}


原创粉丝点击