c_cpp 图表-ConnectedComponents

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 图表-ConnectedComponents相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

// #Graph
// Both Directed and Undirected Graphs have same result
// We need to find connected components/(Groups of connected vertices)

// 1
// 7
// 6
// 0 1
// 1 2
// 0 2
// 3 4
// 3 5
// 5 6
//
// Output:
// Group 1 : 0 1 2
// Group 2 : 3 4 5 6

void DFS(vector< vector<int> > g, int s, map<int,bool> &visited, vector<int> &group){
    visited[s]=true;
    group.push_back(s); // adding to stack while DFS
    for(int i=0;i<g[s].size();i++){
        if(visited[g[s][i]]!=true){
            DFS(g,g[s][i],visited,group);
        }
    }
}

void ConnComp(vector< vector<int> > g){
    map<int,bool> visited;
    vector < vector<int> > Conn;
    for(int i=0;i<g.size();i++){
        if(visited[i]!=true){ // iterate for all unvisited vertices
            vector<int> group;
            DFS(g,i,visited,group);
            Conn.push_back(group);    // adding a group
        }
    }
    for(int i=0;i<Conn.size();i++){
        cout<<"Group "<<i+1<<" : ";
        for(int j=0;j<Conn[i].size();j++){
            cout<<Conn[i][j]<<" ";
        }
        cout<<endl;
    }

}

int main(){
    // freopen("ip.txt","r",stdin);
    int t;
    cin>>t;
    while(t--){
        int v,e;
        cin>>v;
        cin>>e;
        vector< vector<int> > g(v);
        for(int i=0;i<e;i++){
            int x,y;
            cin>>x>>y;
            g[x].push_back(y);
            //g[y].push_back(x);    // in case of Undirected
        }
        ConnComp(g);
        cout<<endl;;
    }
    return 0;
}

以上是关于c_cpp 图表-ConnectedComponents的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 图表的DFS

c_cpp 图表邻接列表

c_cpp 图表的BFS

c_cpp ROOT图表突出显示

c_cpp 在图表中查找已连接组件的数量

c_cpp 130.周围地区