Cod sursa(job #2198266)

Utilizator Narvik13Razvan Roatis Narvik13 Data 24 aprilie 2018 00:57:58
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define NMX 100002

using namespace std;

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

int n,m, grad[NMX];
vector <int> g[NMX], cicle;

void input()
{
    f >> n >> m;
    int x, y;
    for(int i = 1; i <= m; ++i)
    {
        f >> x >> y;
        g[x].push_back(y);
        g[y].push_back(x);
        grad[x] ++;
        grad[y] ++;
    }
}

void euler(int nod)
{
    while(g[nod].size())
    {
        int next = g[nod].back();
        g[nod].pop_back();
        g[next].erase(find(g[next].begin(), g[next].end(), nod));
        euler(next);
    }
    cicle.push_back(nod);
}

void output()
{
    for(const auto& i: cicle)
        o << i << ' ';
}

int main()
{
    input();
    for(int i = 1; i <= n; ++i)
        if(grad[i] % 2 == 1)
        {
            o << -1 << '\n';
            return 0;
        }
    euler(1);
    output();
    return 0;
}