Cod sursa(job #1586443)

Utilizator gbibBacotiu Gabi gbib Data 1 februarie 2016 10:41:38
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
vector <int> v[100005];

void euler(int nod)
{
    stack <int> st;
    vector <int > ciclu;
    vector <int > ::iterator  it;
    st.push(nod);
    while(!st.empty())
    {
        nod=st.top();
        if(v[nod].size())
        {
            int nou=v[nod].back();
            v[nod].pop_back();
            v[nou].erase(find(v[nou].begin(),v[nou].end(),nod));
            st.push(nou);
        }
        else
        {
            st.pop();
            if(!st.empty())
            ciclu.push_back(nod);
        }
    }
    for(auto it : ciclu)
        out<<it<<" ";
    out<<'\n';
}

int main()
{int n,m,i,a,b;
in>>n>>m;
for(i=1;i<=m;i++)
{
    in>>a>>b;
    v[a].push_back(b);
    b[v].push_back(a);
}
for(i=1;i<=n;i++)
    if(!v[i].size()||v[i].size()%2==1)
{
    out<<"-1\n";
    return 0;
}
euler(1);
    return 0;
}