Cod sursa(job #407854)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 2 martie 2010 18:03:35
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <list>
#define size 100000

using namespace std;

int n,m,poz,nod,x,a,b;
list <int> L[size];
int grad[size],st[size];

int main ()
{
    freopen ("ciclueuler.in","r",stdin);
    freopen ("ciclueuler.out","w",stdout);
    scanf ("%d %d",&n,&m);

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

    for (int i=1;i<=n;i++)
        if (grad[i]%2==1)
        {
            printf("-1\n");
            return 0;
        }

    st[poz=1]=1;
    while (poz)
    {
        x=st[poz];
        if (!L[x].empty())
        {
            nod=L[x].front();
            L[x].pop_front();
            list<int> :: iterator it;
            for (it=L[nod].begin() ; it!=L[nod].end() && *it!=st[poz] ;it++);
            L[nod].erase(it);
            st[++poz]=nod;
        }
        else
            printf("%d ",st[poz--]);
    }
    return 0;
}