判断图是否连通

使用并查集

#include

#include
using namespace std;
int set[1001];
int find(int x){
    return x==set[x]?x:(set[x]=find(set[x]));
}
int main(){
    int n,m;
    int x,y;
    while(scanf("%d%d",&n,&m)!=EOF){
        for(int i=1;i<=n;i++)
            set[i]=i;
        for(int i=1;i<=m;i++){
            cin>>x>>y;
            int fx=find(x);
            int fy=find(y);
            set[fx]=fy;            
        }
        int count=0;
        for(int i=1;i<=n;i++){
            if(set[i]==i)
            count++;
        }
        if(count==1)
            cout<<"YES"<        else 
            cout<<"NO"<        
    }    
    
}

你可能感兴趣的:(判断图是否连通)