Cod sursa(job #901290)

Utilizator alexteStefanescu Alexandru Catalin alexte Data 1 martie 2013 09:32:54
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<stdio.h>
#include <list>
using namespace std;
int n,m,k,nr[100005],i,x,stiva[1000005];
list<int> v[100002];
void citire()
{
    int i,a,b;
    scanf("%d %d",&n,&m);
    for(i=1;i<=m;++i)
    {
        scanf("%d %d",&a,&b);
        nr[a]++;
        nr[b]++;
        v[a].push_back(b);
        v[b].push_back(a);
    }
}
void euler(int x)
{
    int y;
    list<int>::iterator it;
    while(v[x].empty()==0)
    {
        y=v[x].front();
        k++;
        stiva[k]=x;
        v[x].pop_front();
        for(it=v[y].begin();it!=v[y].end();++it)
        {
            if(*it==x)
            {
                v[y].erase(it);
                break;
            }
        }
        x=y;
    }
}
int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    citire();
    x=1;
    int ok=0;
    k++;
    stiva[k]=1;
    for(i=1;i<=n;++i)
    {
        if(nr[i]%2==1)
        {
            printf("-1");
            ok=1;
        }
    }
    if(ok==0)
    {
    while(k>0)
    {
        euler(x);
        x=stiva[k];
        k--;
        printf("%d ",x);
    }

    }
    fclose(stdout);
    fclose(stdin);
    return 0;
}