Cod sursa(job #427156)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 27 martie 2010 16:41:06
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <list>
#define IN "ciclueuler.in"
#define OUT "ciclueuler.out"
#define Lg 100001

using namespace std;

int n, m, a, b;
int Rez[Lg*5], nr, top, nod;
list <int> :: iterator it;
list <int> V[Lg];

void citire()
{
    scanf ("%d %d", &n, &m);
    for (int i=0; i<m; i++)
    {
        scanf ("%d %d", &a, &b);
        V[a].push_back(b);
        V[b].push_back(a);
    }
}

void solve()
{
    for (int i=1;i<=n;i++)
        if (V[i].size()%2==1)
        {
            printf("-1\n");
            return;
        }
    Rez[nr = 1] = 1;
    while (nr)
    {
        top=Rez[nr];
        if (!V[top].empty())
        {
            nod = V[top].front();
            V[top].pop_front();

            for (it=V[nod].begin(); it!=V[nod].end() && *it!=top; it++);

            V[nod].erase(it);
            Rez[++nr] = nod;
        }
        else
            printf("%d ",Rez[nr--]);
    }
}

int main()
{
    freopen (IN ,"r", stdin);
    freopen (OUT,"w", stdout);
    citire();
    solve();
    return 0;
}