Pagini recente » Cod sursa (job #3176145) | Cod sursa (job #2345868) | Cod sursa (job #2319946) | Cod sursa (job #2594595) | Cod sursa (job #394887)
Cod sursa(job #394887)
#include<stdio.h>
#define Nmax 500010
struct nod
{
int drum;
nod *urm;
} *l[Nmax];
int ct,nr[Nmax],n;
int st[Nmax],vf;
void sterge(nod *&inc,int info)
{
nod *q;
if (inc->drum==info)
{
q=inc;
inc=inc->urm;
delete q;
}
else
for(nod *t=inc ; t->urm ; t=t->urm)
if ((t->urm)->drum==info)
{
q=t->urm;
t->urm=t->urm->urm;
delete q;
return ;
}
}
void euler()
{
int nod;
st[++vf]=1;
while (vf)
{
nod=st[vf];
if (l[ nod ])
{
st[++vf]=l[nod]->drum;
l[nod] = l[nod]->urm;
sterge(l[st[vf]],nod);
}
else
{
if (vf>1)
printf("%d ",st[vf]);
--vf;
}
}
}
int right()
{
for(int i=1;i<=n;++i)
if (nr[i]%2==1)
return 0;
return 1;
}
void solve()
{
if (right())
euler();
else
printf("-1");
printf("\n");
}
void add(nod *&inc,int info)
{
nod *p=new nod;
p->drum=info;
p->urm=inc;
inc=p;
}
void cit()
{
int a,b,m;
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(;m;--m)
{
scanf("%d%d",&a,&b);
add(l[a],b);
add(l[b],a);
nr[a]++;
nr[b]++;
}
}
int main()
{
cit();
solve();
return 0;
}