Cod sursa(job #434180)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 5 aprilie 2010 11:47:46
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
#include <vector>
#define IN "ciclueuler.in"
#define OUT "ciclueuler.out"
#define L 100005
#define pb push_back

using namespace std;

int a, b, n, m;
vector <int> V[L];
vector <int> :: iterator it;
int st[L], grad[L];
int sf;

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

void solve()
{
    int T, T1;
    for (int i=1;i<=n;i++)
        if (grad[a]%2==1)
        {
            printf("-1\n");
            return ;
        }


    st[++sf]=1;
    while (sf)
    {
        T=st[sf];
        if (V[T].size())
        {
            T1=V[T].back();
            V[T].pop_back();
            for (it=V[T1].begin(); it!=V[T1].end() && *it!=T ;it++);
            V[T1].erase(it);
            st[++sf]=T1;
        }
        else
            printf("%d ",st[sf--]);
    }
    printf("\n");
}

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