0
点赞
收藏
分享

微信扫一扫

[bfs][dfs]leetcode547:省份数量(medium)

青鸾惊鸿 2022-01-31 阅读 63

题目:
在这里插入图片描述
在这里插入图片描述


题解:


代码如下:

class Solution{
public:
    // 题目给的是邻接矩阵,然后判断邻接矩阵中的连通块的个数
    bool visited[210];
    int n,cnt;
    int findCircleNum(vector<vector<int>>& g) {
        memset(visited,0,sizeof visited);
        n=g.size(),cnt=0;
        // 从顶点i开始寻找连通量
        for(int i=0;i<n;++i){
            if(!visited[i]){
                bfs(g,i);
                cnt++;
            }
        }
        return cnt;
    }

    void bfs(vector<vector<int>>&g,int i){
        queue<int> q;
        q.push(i),visited[i]=true;
        while(q.size()){
            int j=q.front();q.pop();
            // 访问j的所有邻接点
            for(int k=0;k<n;++k){
                // j-k之间有边且k点未被访问,则加入k点
                if(j!=k&&g[j][k]&&!visited[k]){
                    visited[k]=true;
                    q.push(k);
                }
            }
        }
    }
    
    void dfs(vector<vector<int>>& g,int i){
        // 遍历 i 的所有邻接点
        for(int j=0;j<n;++j){
            if(i!=j&&g[i][j]&&!visited[j]){
                visited[j]=true;
                dfs(g,j);
            }
        }
    }
};
举报

相关推荐

0 条评论