计算无向未加权图的每个连接部分中的节点数 我是C++的新成员,最近开始图论。 参考后,我可以使用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; } #包括 typedef long-long-ll; 使用名称空间std; int connected=0,temp1,temp2,n,p; 无效DFS(整数开始,向量v[],向量和访问){ 访问[开始]=1; 对于(int i=0;i>n>>p;//顶点和边的数量 向量v[n+1],访问(n+1,0); 对于(inti=0;i>temp1>>temp2; v[temp1]。推回(temp2); v[temp2]。推回(temp1); } 已连接=0; 对于(int i=1;i

计算无向未加权图的每个连接部分中的节点数 我是C++的新成员,最近开始图论。 参考后,我可以使用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; } #包括 typedef long-long-ll; 使用名称空间std; int connected=0,temp1,temp2,n,p; 无效DFS(整数开始,向量v[],向量和访问){ 访问[开始]=1; 对于(int i=0;i>n>>p;//顶点和边的数量 向量v[n+1],访问(n+1,0); 对于(inti=0;i>temp1>>temp2; v[temp1]。推回(temp2); v[temp2]。推回(temp1); } 已连接=0; 对于(int i=1;i,c++,graph,stl,undirected-graph,C++,Graph,Stl,Undirected Graph,您可以通过从main() void DFS(整数开始,矢量v[],矢量和访问,整数和计数) { 访问[开始]=1; 计数++; 对于(int i=0;i您可以维护一个全局变量no_of_nodes,该变量将在每个组件的dfs开始时设置为零,并在访问该组件中的每个节点时递增1 #include <bits/stdc++.h> typedef long long ll; using namespace std; int connected=0, temp1, temp2,n, p;

您可以通过从
main()

void DFS(整数开始,矢量v[],矢量和访问,整数和计数)
{
访问[开始]=1;
计数++;

对于(int i=0;i您可以维护一个全局变量
no_of_nodes
,该变量将在每个组件的dfs开始时设置为零,并在访问该组件中的每个节点时递增1

#include <bits/stdc++.h>
typedef long long ll;

using namespace std;
int connected=0, temp1, temp2,n, p;

int no_of_nodes=0;


void DFS(int start, vector<int> v[],vector<int> &visited) {
    visited[start] = 1;
    no_of_nodes++;
    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;
    vector<int>nodes;
    for(int i=1;i<=n;++i) {
    if(visited[i] == 0 ) {
        connected++;
        no_of_nodes=0;
        DFS(i,v,visited);
        nodes.push_back(no_of_nodes);
    }        
    }
    cout<<connected<<endl;    
return 0;
}
#包括
typedef long-long-ll;
使用名称空间std;
int connected=0,temp1,temp2,n,p;
int no_of_节点=0;
无效DFS(整数开始,向量v[],向量和访问){
访问[开始]=1;
没有_个节点++;
对于(int i=0;i>n>>p;//顶点和边的数量
向量v[n+1],访问(n+1,0);
对于(inti=0;i>temp1>>temp2;
v[temp1]。推回(temp2);
v[temp2]。推回(temp1);
}     
已连接=0;
向量节点;

对于(int i=1;i
#include
——是的,不要这样做。感谢您提供了此附加信息,先生。我现在不使用它:)对于此行“DFS(v[start][i],v,visted);”不会在不传递所需数量的参数的情况下调用函数,因为error@Ghos3t-当然会。我们还需要通过引用传递计数。DFS(v[start][i] ,v,访问,计数);
for(int i=1;i<=n;++i)
{
  if(visited[i] == 0 )
  {
     connected++;
     int count=0;
     DFS(i,v,visited,count);
     cout<<"This component has "<<count<<" nodes"<<"\n";
  }        
}
#include <bits/stdc++.h>
typedef long long ll;

using namespace std;
int connected=0, temp1, temp2,n, p;

int no_of_nodes=0;


void DFS(int start, vector<int> v[],vector<int> &visited) {
    visited[start] = 1;
    no_of_nodes++;
    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;
    vector<int>nodes;
    for(int i=1;i<=n;++i) {
    if(visited[i] == 0 ) {
        connected++;
        no_of_nodes=0;
        DFS(i,v,visited);
        nodes.push_back(no_of_nodes);
    }        
    }
    cout<<connected<<endl;    
return 0;
}