图论 —— 图的连通性 —— 并查集判断连通性

当需要判断图是否为连通图时,可以使用并查集来进行连通分量的统计,若连通分量大于 1,则说明图中存在多个连通分量,图不为连通图。

int n,m;
int father[N];
int Find(int x){
    if(father[x]==-1)
        return x;
    return father[x]=Find(father[x]);
}
void Union(int x,int y){
    x=Find(x);
    y=Find(y);
    if(x!=y)
        father[x]=y;
}
int main(){
    memset(father,-1,sizeof(father));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int x,y;
        scanf("%d%d",&x,&y);
        Union(x,y);
    }

    int cnt=0;//记录连通分量
    for(int i=1;i<=n;i++)
        if(Find(i)==i)
            cnt++;
    printf("%d\n",cnt);
    return 0;
}

你可能感兴趣的:(#,图论——图的连通性)