Cod sursa(job #2426186)

Utilizator vancea.catalincatalin vancea.catalin Data 26 mai 2019 17:12:09
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
#include <vector>

#define NMAX 100005
#define MMAX 500005
using namespace std;

fstream fin("ciclueuler.in",ios::in),fout("ciclueuler.out",ios::out);
//fstream fin("euler.in",ios::in),fout("euler.out",ios::out);

int n, m;
vector<int> v[NMAX];
vector<int> cycle;
vector<int> result;
stack<int> st;

void read_data()
{
    int i,x,y;
    fin>>n>>m;
    for(i = 1; i<=m; i++)
    {
        fin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }
}

int check_euler()
{
    int i;
    for(i = 1; i<=n; i++)
    {
        if(v[i].size() % 2 == 1)
        {
            return -1;
        }
    }
    return 0;
}

void make_cycle()
{
    int new_node, node;
    st.push(1);

    while(st.empty()==false)
    {
        node = st.top();
        if(v[node].size() != 0)
        {
            new_node = v[node].back();
            v[node].pop_back();
            v[new_node].erase(find(v[new_node].begin(), v[new_node].end(), node));
            st.push(new_node);
        }
        else
        {
            if(st.size()!=1)
                fout<<node<<" ";
            st.pop();
        }
    }
}


void solve()
{
    int i;
    if(check_euler() != -1)
    {
        make_cycle();
    }
    else
    {
        fout<< "-1";
    }
    fout<<"\n";
}


int main()
{
    read_data();
    solve();
    return 0;
}