leetcode--547. Friend Circles

There are N students in a class. Some of them are friends, while some are not. Their friendship is transitive in nature. For example, if A is a direct friend of B, and B is a direct friend of C, then A is an indirect friend of C. And we defined a friend circle is a group of students who are direct or indirect friends.

Given a N*N matrix M representing the friend relationship between students in the class. If M[i][j] = 1, then the ith and jth students are direct friends with each other, otherwise not. And you have to output the total number of friend circles among all the students.

为一个统计共有多少个连通区的问题。如果A与B连通,B与C连通,则A与C连通。此题运用深度优先搜索DFS。

最外层利用一个for循环,检查每一个节点是否被访问过,如果没有被访问过,则将其送入深度优先搜索的函数,寻找它的连通点。并且将连通区数量加一。

深度优先搜索函数,利用递归,将每两两节点关系进行检查。

class Solution {
public:
    
    int len;
    int group[200] = {0};  // record if this node has been visited
    void dfs(vector<vector<int>>& M, int visited) {
        for (int i = 0; i<len; i++) {
            if (M[visited][i] == 1 && group[i] == 0) {
                group[i] = 1;
                dfs(M, i);
            }
        }
    }

    int findCircleNum(vector<vector<int>>& M) {
        len = M[0].size();
        int max = 0;
        for (int i = 0; i<len; i++) {
            if (group[i] == 1) continue;
            max++;
            dfs(M, i);
        }
        return max;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值