Cod sursa(job #2123800)

Utilizator dragomirmanuelDragomir Manuel dragomirmanuel Data 6 februarie 2018 17:27:03
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

const int NodMax = 100005;
const int MuchMax = 500005;

vector < int > G[NodMax];
stack < int > st;

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

struct muchie
{
    int n1, n2;
    bool sters = false;
}v[MuchMax];

int N, M;

void Read()
{
    fin >> N >> M;

    for(int i=1; i<=M; ++i)
    {
        fin >> v[i].n1 >> v[i].n2;

        G[v[i].n1].push_back(i);
        G[v[i].n2].push_back(i);
    }
}

void Euler()
{
    st.push(1);

    while(!st.empty())
    {
        int nod = st.top();

        if(G[nod].size())
        {
            int next = G[nod].back();
            G[nod].pop_back();

            if(v[next].sters == true)
                continue;

            v[next].sters = true;

            if(v[next].n1 == nod)
                st.push(v[next].n2);

            else
                st.push(v[next].n1);

        }

        else
        {
            fout << nod << " ";
            st.pop();
        }
    }
}

int main()
{
    Read();

    for(int i=1; i<=N; ++i)
    {
        if(G[i].size() % 2 == 1)
        {
            cout << -1 << "\n";
            return 0;
        }
    }

    Euler();
    return 0;
}