Pagini recente » Cod sursa (job #1408023) | Cod sursa (job #277695) | Cod sursa (job #1227457) | Cod sursa (job #3038452) | Cod sursa (job #391893)
Cod sursa(job #391893)
#include <cstdio>
#define file_in "ciclueuler.in"
#define file_out "ciclueuler.out"
#define Nmax 501000
int n,m,i,st[Nmax],vf,grad[Nmax],sol[Nmax],t[Nmax],k;
struct ce
{
int x,q;
}
a[Nmax];
int main()
{
int i,x,y;
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d",&n, &m);
k=0;
while(m--)
{
scanf("%d %d", &x, &y);
grad[x]++;
grad[y]++;
a[++k].x=y;
a[k].q=t[x];
t[x]=k;
a[++k].x=x;
a[k].q=t[y];
t[y]=k;
}
for (i=1;i<=n;++i)
if (grad[i]&1)
{
printf("-1\n");
return 0;
}
k=0;
st[1]=1;
vf=1;
while(vf>0)
{
x=st[vf];
if (t[x]==0)
{
k++;
sol[k]=x;
vf--;
}
else
{
i=t[x];
y=a[i].x;
st[++vf]=y;
t[x]=a[i].q;
i=t[y];
if (a[i].x==x)
t[y]=a[i].q;
else
{
while(a[a[i].q].x!=x)
i=a[i].q;
a[i].q=a[a[i].q].q;
}
}
}
for (i=1;i<=n;++i)
printf("%d ", sol[i]);
fclose(stdin);
fclose(stdout);
return 0;
}