找出一个无向图中的联通块的个数 C++ 版

时间:2019-02-14
本文章向大家介绍找出一个无向图中的联通块的个数 C++ 版,主要包括找出一个无向图中的联通块的个数 C++ 版使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

找出一个无向图中的联通块的个数 C++

1.题意

找出一个无向图中的联通块的个数。

2.分析

使用深搜即可

3.案例演示

  • 代码
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int v[1001][1001];//记录连通路线 默认为0 不连通
bool visit[1001];//记录是否遍历过
int n;//n个城市

void dfs(int node){
    visit[node] = true;
    for(int i=1; i<=n; i++){
        if(visit[i]==false && v[node][i] == 1){
            dfs(i);
        }
    }
}
int main()
{
    int m, k, a, b;//m条路 k个要检查的城市 ab为路线起点终点
    scanf("%d%d", &n, &m);
    for(int i=0; i<m; i++){
        scanf("%d%d", &a, &b);
        v[a][b] = 1;
        v[b][a] = 1;
    }
        
    fill(visit, visit+1001, false);//重置visit 所有城市未被遍历
    int temp = 0;    
    int block = 0;//记录连通分量
    for(int j=1; j<=n; j++){
        if(visit[j] == false){
            dfs(j);
            block++;//连通分量+1
        }
    } 
    cout<<"block = " << block; 
    return 0;
}
  • 测试用例
3 2
1 2
1 3
  • 执行结果