Cod sursa(job #2065461)

Utilizator papinub2Papa Valentin papinub2 Data 13 noiembrie 2017 20:08:28
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <stack>
#include <list>
#include <algorithm>

using namespace std;

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

int n, m, x, y, nod_curent, nod_vecin;
list <int> A[100005];
stack <int> S;

bool ciclu()
{
    for (int i = 1; i <= n; i++)
        if (A[i].size() % 2 != 0)
            return false;
    return true;
}

int main()
{
    in >> n >> m;

    for (int i = 1; i <= m; i++)
    {
        in >> x >> y;

        A[x].push_back(y);
        A[y].push_back(x);
    }

    if (ciclu())
    {
        S.push(1);

        while (!S.empty())
        {
            nod_curent = S.top();

            while (!A[nod_curent].empty())
            {
                nod_vecin = A[nod_curent].front();
                A[nod_curent].pop_front();
                A[nod_vecin].erase(find(A[nod_vecin].begin(), A[nod_vecin].end(), nod_curent));
                S.push(nod_vecin);
                nod_curent = nod_vecin;
            }

            out << S.top() << ' ';
            S.pop();
        }
    }

    else

        out << -1;

    return 0;
}