Cod sursa(job #1907084)

Utilizator geralt_of_riviajohn nathalis geralt_of_rivia Data 6 martie 2017 17:44:08
Problema Ciclu Eulerian Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>

using namespace std;
ifstream cin ("ciclueuler.in");
ofstream cout ("ciclueuler.out");
struct bla
{
    int nod,urm;
} t[1000010];
int start[1000010];
int st[1000010],vf;
int grad[1000010];
int n,m;
void read ()
{ int x,y,k=0;
    cin>>n>>m;
    for(int i=1;i<=m;++i)
    {
        cin>>x>>y; grad[x]++; grad[y]++;
        t[++k].nod=y; t[k].urm=start[x]; start[x]=k;
        t[++k].nod=x; t[k].urm=start[y]; start[y]=k;
    }
}
void sterge_muchia (int a,int b)
{
    for(int x=start[a];x;x=t[x].urm)
    if(t[x].nod==b) { t[x].nod=-1; return; }
}
void df ()
{
    vf=1;
    st[1]=1;
    while(vf)
    { int nr=0;
        for(int x=start[st[vf]];x;x=t[x].urm)
        {
            if(t[x].nod!=-1)
            {
                start[st[vf]]=t[x].urm;
                st[++vf]=t[x].nod;
                sterge_muchia(t[x].nod,st[vf-1]);
                t[x].nod=-1;
                nr=1;
                break;
            }
        }
        if(nr==0)
        {
           if(st[vf]!=1) cout<<st[vf]<<" ";
           vf--;
        }
    }
}
void solve ()
{
    for(int i=1;i<=n;i++)
    {
        if(grad[i]%2!=0) {cout<<-1; return;}
    }
    cout<<1<<" ";
    df();
    cout<<"\n";
}
int main()
{
    read();
    solve();
    cin.close();
    cout.close();
    return 0;
}