求解无向图的连通分量个数方法

1:DFS

#define N 10000 //图中点的个数
int graph[N][N];// 0 表示没有边 1 表示有边
bool visited[N]={false};
void DFS(int root){
    visited[root]=true;
    for(int i=0;i

思路:一次深搜能访问一个节点所有能访问的边,统计有几次DFS就能表示有几个变量了。

2:并查集

#define N 10000 //图中点的个数
int father[N];
int findFather(int v){
    int m=v;
    while(v!=father[v]){
        v=father[v];
    }
    while(m!=father[m]){
        int temp=father[m];
        father[m]=v;
        m=temp;
    } 
}
void union(int a,int b){
    int Fa=findfather(a);
    int Fb=findfather(b);
    if(Fa!=Fb){
        father[Fa]=Fb;
    }
}
int cout(){
    int cnt=0;
    for(int i=0;i

将能相互连通的点的集合赋予一个共同的父亲,统计父亲的个数就行了。

你可能感兴趣的:(求解无向图的连通分量个数方法)