Cod sursa(job #1649883)

Utilizator andreismara97Smarandoiu Andrei andreismara97 Data 11 martie 2016 15:32:48
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
#include<deque>
#include<algorithm>
#include<queue>
using namespace std;

ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");

const int Nmax = 100001;
vector <int> lista[Nmax];
int n, m=0;
int grad[Nmax]={0};

void citire()
{
    int x,y;
    in>>n>>m;
    while(in >> x >>y)
    {
        lista[x].push_back(y);
        lista[y].push_back(x);
        grad[x]++; grad[y]++;
    }
}

int verif()
{
    for(int i=1; i<=n; i++)
        if(grad[i]%2==1)
            return 0;
    return 1;
}

void sterge(int nod, int baza)
{
    lista[baza].erase(lista[baza].begin());
    for(int i=0; i<lista[nod].size(); i++)
        if(lista[nod][i] == baza)
        {
            lista[nod].erase(lista[nod].begin()+i);
            break;
        }
}

void DFS(int baza)
{
    while(lista[baza].size())
    {
        int nod = lista[baza][0];
        sterge(lista[baza][0], baza);
        DFS(nod);
        out<<baza<<' ';
    }
}

int main ()
{
    citire();
    if(verif())
        DFS(1);
    else
        out<<"-1\n";
    return 0;
}