UVa 10596

来源:互联网 发布:淘宝开店新规则 编辑:程序博客网 时间:2024/05/17 00:55

判断无向图中是否有欧拉回路

并查集判断是否连通,每个点的度数必须为偶数个

#include<stdio.h>#include<string.h>#include<stdlib.h>int G[201][201];int num[201];int parent[201];int degree[201];int nodesn;int nodes;int ini(){    for(int i=0;i<201;++i)    {        for(int j=0;j<201;++j)        {            G[i][j]=0;        }        degree[i]=0;        num[i]=1;        parent[i]=i;      // nodes=0;        nodesn=0;    }}int is_balanced(){    for(int i=0;i<nodes;++i)    {        if(degree[i]%2)        return 0;    }    return 1;}int is_connected(){    for(int i=0;i<nodes;++i)    {        if(num[i]==0)           nodesn++;    }    if(nodesn==nodes-1)    {        return 1;    }    return 0;}int find(int x){    if(parent[x]==x)        return x;    else    {      return parent[x]=find(parent[x]);    }}void merge(int a,int b){    int t1=find(a);    int t2=find(b);    if(t1!=t2)    {        num[t1]+=num[t2];        num[t2]=0;        parent[t2]=t1;    }}int main(){    int R;    int a,b;    while(scanf("%d%d",&nodes,&R)!=EOF)    {        ini();      //  printf("nodes %d\n",nodes);        for(int i=0;i<R;++i)        {            scanf("%d%d",&a,&b);            G[a][b]++;            G[b][a]++;            degree[a]++;            degree[b]++;            if(G[a][b])            {                merge(a,b);            }        }     //   printf("\nconnect ");        /*for(int i=0;i<nodes;++i)        {            printf("%d ",num[i]);        }*/      //  printf("\n");        if(is_connected()&&is_balanced())        {            printf("Possible\n");        }        else        {            printf("Not Possible\n");        }    }    return 0;}



原创粉丝点击