UVa 10054 The Necklace(欧拉回路)

题目链接:UVa 10054  The Necklace

对有向图来说,有向图G具有一条单向欧拉回路,当且仅当是连通的,且每个结点入度等于出度。对无向图来说,无向图G具有一条欧拉回路,当且仅当G是连通的,并且所有结点的度数均为偶数。

我还是不明白这个题为什么要逆序输出。。

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

const int MAX_N = 50 + 10;
int G[MAX_N][MAX_N], p[MAX_N], degree[MAX_N];

int _find(int x)
{
    return p[x] == x ? x : (p[x] = _find(p[x]));
}

void dfs(int u)
{
    for(int v = 0; v < MAX_N; v++)
    {
        if(G[u][v])
        {
            G[u][v]--, G[v][u]--;
            //printf("%d %d\n", u, v);
            dfs(v);
            printf("%d %d\n", v, u);
        }
    }
}
int n;
int main()
{
    int T, _case = 0;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &n);
        int u, v, x, y, _beg, _par;
        bool flag = true;
        memset(G, 0, sizeof(G));
        memset(degree, 0, sizeof(degree));
        for(int i = 0; i < MAX_N; i++)
            p[i] = i;
        for(int i = 0; i < n; i++)
        {
            scanf("%d%d", &u, &v);
            G[u][v]++, G[v][u]++;
            degree[u]++, degree[v]++;
            x = _find(u);
            y = _find(v);
            if(x != y)
                p[x] = y;
        }
        for(int i = 0; i < MAX_N; i++)
        {
            if(degree[i])
            {
                _par = _find(i), _beg = i;
                break;
            }
        }
        for(int i = 0; i < MAX_N; i++)
        {
            if(degree[i])
            {
                if(_par != _find(i))
                {
                    flag = false;
                    break;
                }
            }
        }
        if(flag)
        {
            for(int i = 0; i < MAX_N; i++)
            {
                if(degree[i] % 2 != 0)
                {
                    flag = false;
                    break;
                }
            }
        }
        if(_case != 0)
            printf("\n");
        printf("Case #%d\n", ++_case);
        if(!flag)
            printf("some beads may be lost\n");
        else
            dfs(_beg);
    }
    return 0;
}


你可能感兴趣的:(UVa 10054 The Necklace(欧拉回路))