Cod sursa(job #1814023)

Utilizator Vlad1111Sbengheci Vlad-Andrei Vlad1111 Data 23 noiembrie 2016 16:39:03
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
#define cout cerr
#define MAX 100005
using namespace std;

int n,m,x,y;
vector <int> a[MAX];
stack <int> b;

void DFS(int k)
{
    while(a[k].size())
    {
        int x=a[k].front();
        a[k].erase(a[k].begin());
        for(int j=0; j<a[x].size(); j++)
            if(a[x][j]==k)
            {
                a[x].erase(a[x].begin()+j);
                break;
            }
        DFS(x);
    }
    b.push(k);

}

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",&x,&y);
        a[x].push_back(y);
        a[y].push_back(x);
    }

    bool TR=false;
    for(int i=1; i<=n; i++)
    {
        if(a[i].size()%2==1)
            TR=true;
        //cout<<a[i].size()<<" ";
        ///for(int j=0;j<a[i].size();j++)
        ///    cout<<a[i][j]<<" ";
        ///cout<<endl;

    }

    if(TR)
        printf("-1");
    else
    {
        DFS(1);


        while(b.size())
        {
            printf("%d ",b.top());
            b.pop();
        }
    }

    return 0;
}