hdu1878欧拉回路

怎么说呢,做完这题发现自己的代码好挫好挫啊。。。

判断无向图欧拉回路,只需要判断连通与无奇点就行,待会转一个欧拉回路的总结。

 

代码:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1010;
int degree[N];
int arr[N];
int p[N];
int find(int x)
{
    if(x!=p[x])
    p[x]=find(p[x]);
    return p[x];
}
void unions(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    if(fx!=fy)
    {
        p[fy]=p[fx];
    }
}

int main()
{
    int n,m,flag,x,y;
    while(scanf("%d",&n)!=EOF&&n)
    {

        scanf("%d",&m);
        flag=1;
        for(int i=1;i<=n;i++)
        {
            p[i]=i;
            arr[i]=0;
        }
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&x,&y);
            arr[x]++;
            arr[y]++;
            unions(x,y);
        }
        for(int i=1;i<=n;i++ )
        {
            if(p[i]!=1)
            {
                flag=0;
                break;
            }
            else if(arr[i]%2!=0)
            {
                flag=0;
                break;
            }
        }
        if(flag)
        cout<<1<<endl;
        else
        cout<<0<<endl;
    }
    return 0;
}


 

 

posted @ 2013-04-28 09:59  amourjun  阅读(111)  评论(0编辑  收藏  举报