Cod sursa(job #900715)

Utilizator alexteStefanescu Alexandru Catalin alexte Data 28 februarie 2013 21:27:00
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 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;
    k++;
    stiva[k]=1;
    for(i=1;i<=n;++i)
    {
        if(nr[i]%2==1)
        {
            printf("-1");
            fclose(stdout);
            return 0;
        }
    }
    int t=0;
    while(k>0)
    {
        euler(x);
        x=stiva[k];
        k--;
        t++;
        nr[t]=x;
    }
    for(i=t;i>=1;--i)
        printf("%d ",nr[i]);
    fclose(stdout);
    return 0;
}