我刚接触C++ STL,并最近开始学习图论。 在参考https://www.geeksforgeeks.org/connected-components-in-an-undirected-graph/后,我可以使用DFS计算无向无权图中连通组件的数量:
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int connected=0, temp1, temp2,n, p;
void DFS(int start, vector<int> v[],vector<int> &visited) {
visited[start] = 1;
for(int i= 0; i<v[start].size(); ++i) {
if(visited[v[start][i]] == 0)
DFS(v[start][i], v, visited);
}
}
int main() {
cin>>n>>p; // number of vertices and edges
vector<int> v[n+1], visited(n+1,0);
for(int i=0; i<p; ++i) {
cin>>temp1>>temp2;
v[temp1].push_back(temp2);
v[temp2].push_back(temp1);
}
connected = 0;
for(int i=1;i<=n;++i) {
if(visited[i] == 0 ) {
connected++;
DFS(i,v,visited);
}
}
cout<<connected<<endl;
return 0;
}
但是我们如何计算每个连通分量中节点的总数?
例如:在这个图中,查看图片有三个连通分量,分别具有3、2和1个节点。
#include <bits/stdc++.h>
。请参考这里。 - PaulMcKenzie