Cod sursa(job #1638205)

Utilizator andreismara97Smarandoiu Andrei andreismara97 Data 7 martie 2016 21:48:19
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<fstream>
#include<vector>
#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;
int grad[Nmax]={0};

void citire()
{
    in>>n>>m;
    for(int i=1; i<=m; i++)
    {
        int x,y;
        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;
}