Cod sursa(job #2421173)

Utilizator Eszter04Halasz Eszter Eszter04 Data 14 mai 2019 13:26:11
Problema Ciclu Eulerian Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
//#include <iostream>
#include <fstream>
#include <vector>
#include <deque>

using namespace std;

ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");

struct adat
{
    int p,h;
    bool lat;
};
struct el
{
    vector<adat>e;
};
vector<el>x;

deque<int>meg,v;

bool p;

int n,m,i,a,b,k,k1;

int euler(int csp)
{
    int i;
    v.push_front(csp);
    for(i=0;i<x[csp].e.size();++i)
    {
        if(!x[csp].e[i].lat)
        {
            x[csp].e[i].lat=1;
            k=x[csp].e[i].h;
            k1=x[csp].e[i].p;
            x[k1].e[k].lat=1;
            euler(x[csp].e[i].p);
        }
    }
    meg.push_front(v.front());
    v.pop_front();
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin>>n>>m;
    x.resize(n+1);
    for(i=1;i<=m;++i)
    {
        cin>>a>>b;
        if(a!=b)
        {
            x[a].e.push_back({b,x[b].e.size(),0});
            x[b].e.push_back({a,x[a].e.size()-1,0});
        }
        if(a==b)
        {
            x[a].e.push_back({b,x[b].e.size()+1,0});
            x[b].e.push_back({a,x[a].e.size()-1,0});
        }
    }

    p=false;
    for(i=1;i<=n;++i)
    {
        if(x[i].e.size()%2!=0)
        {
            p=true;
            break;
        }
    }
    if(p==true) cout<<"-1";
    /*for(i=1;i<=n;++i)
    {
        cout<<i<<": ";
        for(auto e:x[i].e)
            cout<<e.p<<" "<<e.h<<" "<<e.lat<<"\n";;
        cout<<"\n";
    }
*/
    if(p==false)
    {
        euler(1);
        for(i=0;i<meg.size()-1;++i)
            cout<<meg[i]<<" ";

    }
    return 0;
}