Cod sursa(job #2052191)

Utilizator rangal3Tudor Anastasiei rangal3 Data 30 octombrie 2017 10:33:30
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <list>
#include <stack>
#include <algorithm>
#define file "ciclueuler"
#define N 100003

using namespace std;

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

int n,m,x,y;

list<int> v[N];
stack<int> st;

void input()
{
    fin>>n>>m;
    while(m--)
    {
        fin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
}

bool Ciclu()
{
    for(int i=1; i<=n; ++i)
        if(v[i].size() == 0 || v[i].size() %2 != 0) return 0;
    return 1;
}

void output()
{
    //for(int i=1; i<=n; ++i)
      //  fout<<v[i].size()<<" ";
}

int main()
{
    input();

    if(Ciclu())
    {
        st.push(1);
        while(!st.empty())
        {
            int nod = st.top();

            while(!v[nod].empty())
            {
                int nodurm = v[nod].front();
                v[nod].pop_front();
                v[nodurm].erase(find(v[nodurm].begin(), v[nodurm].end(), nod));
                st.push(nodurm);
                nod = nodurm;
            }
            fout<<st.top()<<" ";
            st.pop();
        }
    }
    else fout<<"-1\n";

    fin.close(); fout.close();
    return 0;
}