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.周围地区