Cod sursa(job #1593698)

Utilizator AlexVolatiluVoicu Alex AlexVolatilu Data 8 februarie 2016 20:03:05
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <vector>

using namespace std;

int g[100002];
vector<int> v[100002];

void ciclue(int x)
{
    int y;
    vector<int>::iterator itr,fin;

    while(!v[x].empty())
    {
        y=v[x].back();
        v[x].pop_back();

        itr=v[y].begin();
        fin=v[y].end();
        while(itr!=fin)
        {
            if(*itr==x) {v[y].erase(itr);break;}
            itr++;
        }
        ciclue(y);
        printf("%d ",x);
    }
}

int main()
{
    freopen("ciclueuler.in","r",stdin);
    freopen("ciclueuler.out","w",stdout);
    int n,m,i,x,y;
    char ok=1;
    scanf("%d%d",&n,&m);
    for(i=0;i<m;i++)
    {
        scanf("%d%d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
        g[x]++;
        g[y]++;
    }
    i=1;
    while(ok && (i<=n))
    {
        if(g[i]%2==1||g[i]==0) ok=0;
        i++;
    }
    if(ok==0) {printf("-1");return 0;}

    ciclue(1);

    return 0;
}