Cod sursa(job #1837219)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 29 decembrie 2016 11:56:57
Problema Ciclu Eulerian Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#include <list>
#include <stack>
#include <algorithm>
using namespace std;

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

    int n,m;
    fin>>n>>m;

    vector< list<int> > Adj(n+1);
    for(int i=0;i<m;++i){
        int a,b;
        fin>>a>>b;
        Adj[a].push_back(b);
        Adj[b].push_back(a);
    }

    bool euleri=true;

    for(int i=1;euleri && i<=n;++i)
        if(Adj[i].size()%2 != 0)
            euleri=false;


    if(!euleri) fout<<"-1\n";
    else {
        int kezd=1;
        stack<int> st;
        st.push(kezd);

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

            if(Adj[v].empty()){
                st.pop();
                if(!st.empty())
                    fout<<v<<' ';
            }
            else{
               int sz = Adj[v].front();

               st.push(sz);

               Adj[v].pop_front();
               Adj[sz].erase( find(Adj[sz].begin(), Adj[sz].end(), v) );
            }
        }
    }

    fout<<'\n';
}