Pagini recente » Cod sursa (job #2095593) | Cod sursa (job #1504904) | Cod sursa (job #2269551) | Cod sursa (job #1393317) | Cod sursa (job #391897)
Cod sursa(job #391897)
#include <cstdio>
#define file_in "ciclueuler.in"
#define file_out "ciclueuler.out"
#define Nmax 1001000
int n,m,i,st[Nmax],vf,grad[Nmax],sol[Nmax],t[Nmax],k,j;
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;
for (j=1;j<=m;++j)
{
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<=m;++i)
printf("%d ", sol[i]);
fclose(stdin);
fclose(stdout);
return 0;
}