Leetcode 547. 省份数量 求图的连通分量

news/2024/7/20 22:05:21 标签: leetcode, 深度优先, 算法, 广度优先, 图论

原题链接:Leetcode 547. 省份数量

在这里插入图片描述
在这里插入图片描述
DFS

class Solution {
public:
    vector<int> visited;
    void dfs(vector<vector<int>>& isConnected,int x,int n)
    {
        for(int i=0;i<n;i++)
        {
            if(!visited[i] && isConnected[i][x])
            {
                visited[i]=1;
                dfs(isConnected,i,n);
            }
        }
    }
    int findCircleNum(vector<vector<int>>& isConnected) {
        int n=isConnected.size();
        visited.resize(n);
        int num=0;
        for(int i=0;i<n;i++)
        {
            if(!visited[i])
            {
                dfs(isConnected,i,n);
                num++;
            }
        }
        return num;
    }
};

BFS

class Solution {
public:
    int findCircleNum(vector<vector<int>>& isConnected) {
        int n=isConnected.size();
        vector<int> visited;
        visited.resize(n);
        int num=0;
        queue<int> q;
        for(int i=0;i<n;i++)
        {
            if(!visited[i])
            {
                q.push(i);
                while(!q.empty())
                {
                    int x=q.front();
                    q.pop();
                    for(int j=0;j<n;j++)
                    {
                        if(!visited[j] && isConnected[x][j])
                        {
                            visited[j]=1;
                            q.push(j);
                        }
                    }
                }
                num++;
            }
        }
        return num;
    }
};

并查集

class Solution { 
public:
    map<int,int> fa;
    int findfather(int i)
    {
        if(fa[i]==i) return i;
        else return findfather(fa[i]);
    }
    void Union(int x,int y)
    {
        int fx=findfather(x);
        int fy=findfather(y);
        if(fx!=fy) fa[fx]=fy;
    }
    int findCircleNum(vector<vector<int>>& isConnected) {
        int n=isConnected.size();
        for(int i=0;i<n;i++) fa[i]=i;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(isConnected[i][j])  Union(i,j);
            }
        }
        set<int> s;
        for(int i=0;i<n;i++)
        {
            int x=findfather(i);
            s.insert(x);
        }
        return s.size();
    }
};




http://www.niftyadmin.cn/n/1264523.html

相关文章

Leetcode 1319. 连通网络的操作次数 DFS/并查集

原题链接&#xff1a;Leetcode 1319. 连通网络的操作次数 并查集路径压缩 class Solution { public:map<int,int> fa;int findfather(int x){int ax;while(x!fa[x]) xfa[x];while(a!fa[a]){int zfa[a];afa[a];fa[z]x;}return x;}void Union(int x,int y){int fxfindfa…

Leetcode 743. 网络延迟时间 DFS/BFS/Dijkstra/Dijkstra+优先队列/Floyd/Bellman-Ford

原题链接&#xff1a;Leetcode 743. 网络延迟时间 DFS class Solution { public:vector<vector<pair<int,int>>> adj;vector<int> visit;void dfs(int now,int w){if(visit[now]>w){visit[now]w;for(auto x:adj[now]){int ax.first,bx.second;df…

对于互信息的理解

转载&#xff1a;互信息&#xff08;Mutual Information&#xff09;的介绍

Leetcode 310. 最小高度树 BFS

原题链接&#xff1a;Leetcode 310. 最小高度树 超时DFS&#xff1a; class Solution { public:int res0;void dfs(vector<int>& visit,vector<vector<int>>& edges,int now,int h){visit[now]1;int flag-1;for(auto x:edges){int ax[0],bx[1];if(a…

Leetcode 841. 钥匙和房间

原题链接&#xff1a;Leetcode 841. 钥匙和房间 DFS class Solution { public:vector<int> visit;vector<vector<int>> adj;int num0;void dfs(int i){visit[i]1;num;for(auto x:adj[i]){if(!visit[x]) dfs(x);}}bool canVisitAllRooms(vector<vector<…

Leetcode 851. 喧闹和富有 DFS/拓扑排序

原题链接&#xff1a;Leetcode 851. 喧闹和富有 DFS1&#xff1a; class Solution { public:int tmpINT_MAX;int person;vector<vector<int>> adj;vector<int> visit;void dfs(vector<int>& quiet,int now){if(quiet[now]<tmp){tmpquiet[now];…

Leetcode 1042. 不邻接植花 图染色

原题链接&#xff1a;Leetcode 1042. 不邻接植花 class Solution { public:vector<int> gardenNoAdj(int n, vector<vector<int>>& paths) {vector<int> res(n1);vector<vector<int>> adj(n1);for(auto x:paths){int ax[0],bx[1];adj…

Leecode 1976. 到达目的地的方案数 Dijkstra+DP

原题链接&#xff1a;Leecode 1976. 到达目的地的方案数 参考&#xff1a;到达目的地的方案数 dijkstraDP&#xff0c;用一个cnt数组记录一下每个点到起点的最短路径的数量。 class Solution { public:vector<vector<pair<int,int>>> adj;vector<int>…