Cod sursa(job #2421102)

Utilizator kidesoEles Julia kideso Data 14 mai 2019 11:50:43
Problema Ciclu Eulerian Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
#include <vector>
#include <deque>

using namespace std;

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

struct cica
{
    int p,h;
    bool latott;
};
struct cica1
{
    vector <cica> sz;
};

vector <cica1> x;
int n,m,i,a,b;
deque <int> k;
deque <int> old;
bool paros;

int euler(int akt)
{
    int i=0,t,t1;

    k.push_front(akt);
    for(i=1;i<x[akt].sz.size();++i)
    {
        if(!x[akt].sz[i].latott)
        {
            x[akt].sz[i].latott=true;
            t=x[akt].sz[i].h;
            t1=x[akt].sz[i].p;
            x[t1].sz[t].latott=true;
            euler(x[akt].sz[i].p);
        }
    }

    old.push_front(k.front());
    k.pop_front();
}

int main()
{
    cin>>n>>m;
    x.resize(n+1);
    for(i=1;i<=m;++i)
    {
        cin>>a>>b;
        if(a!=b)
        {
            x[a].sz.push_back({b,x[b].sz.size(),false});
            x[b].sz.push_back({a,x[a].sz.size()-1,false});
        }
        else
        {
            x[a].sz.push_back({b,x[b].sz.size()+1,false});
            x[b].sz.push_back({a,x[a].sz.size()-1,false});
        }
    }

    euler(1);

    paros=true;
    for(auto e:x)
    {
        if(e.sz.size()%2!=0) paros=false;
    }

    if(paros)
    {
        cout<<old.front()<<" ";
        for(i=old.size()-1;i>=1;--i)
            cout<<old[i]<<" ";
    }
    else cout<<"-1";
    return 0;
}