深度优先搜索系列二-leetcode 547 朋友圈

2020-01-20  本文已影响0人  徐慵仙

题目

https://leetcode-cn.com/problems/friend-circles/

朋友圈.png

简析

矩阵遍历问题,循环判断所有小朋友,即从对角线点出发

1) for循环范围

判断某个小朋友,自然要把这个小朋友的所有朋友找出来,行是传入的K,列是从第一列,到最后一列。

for(int j=0;j<M.size();j++)//1 确定for循环范围,扫描第k个人的朋友圈

2) 判断是否满足条件

if(M[k][j]==1)

3)满足条件后如何

如此时是0行,0和1是朋友,则把(0,1),(1,1)这个两个点设为2,然后搜索1号小朋友。

if(M[k][j]==1){
           M[k][j]=2;
           M[j][j]=2;
           search(M,j);
}

4)主函数

主函数从第一个小朋友开始,遍历每一个小朋友,即对角线元素

完整代码

class Solution {
public:
    int findCircleNum(vector<vector<int>>& M) {
        int count=0;
        for(int i=0;i<M.size();i++){
                if(M[i][i]==1){
                    count++;
                    M[i][i]=2;
                    search(M,i);
                }
        }
        return count;
    }
    void search(vector<vector<int>>& M,int k){
        for(int j=0;j<M.size();j++)//1 确定for循环范围,扫描第k个人的朋友圈
        {
            if(M[k][j]==1){
                M[k][j]=2;
                M[j][j]=2;
                search(M,j);
            }
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读