Pagini recente » Cod sursa (job #1685704) | Cod sursa (job #1897494) | Cod sursa (job #2281311) | Cod sursa (job #2354812) | Cod sursa (job #303474)
Cod sursa(job #303474)
#include <stdio.h>
#define NM 100001
#define MM 500001
int *a[NM];
int x[MM],y[MM];
int viz[NM];
int st[MM];
int vf,nr;
void df(int);
inline void swap(int &x,int &y)
{int aux=x;
x=y;
y=aux;
}
int n,m,grad[NM];
int main()
{freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
int i,c,d;
for (i=1;i<=m;i++)
{scanf("%d %d",&c,&d);
x[i]=c;
y[i]=d;
grad[d]++;
grad[c]++;
}
for (i=1;i<=n;i++)
{a[i]=new int[grad[i]+1];
a[i][0]=0;
}
for (i=1;i<=m;i++)
{a[x[i]][0]++;
a[x[i]][a[x[i]][0]]=y[i];
a[y[i]][0]++;
a[y[i]][a[y[i]][0]]=x[i];
}
df(1);
for (i=1;i<=n;i++)
if (grad[i]%2==1||viz[i]==0)
{printf("-1");
return 0;
}
vf=1;
st[vf]=1;
int x,y;
while (vf)
{x=st[vf];
if (a[x][0]==0)
{nr++;
if (nr<=m)
{printf("%d ",x);
}
vf--;
continue;
}
y=a[x][a[x][0]];
if (y>n)
{i=i;
i=i;
viz[x]=x;
}
for (i=1;i<=a[y][0];i++)
{if (a[y][i]==x)
{swap(a[y][i],a[y][a[y][0]]);
break;
}
}
a[x][0]--;
if (i<=a[y][0]) a[y][0]--;
st[++vf]=y;
}
return 0;
}
void df(int k)
{viz[k]=1;
int i;
for (i=1;i<=a[k][0];i++)
if (!viz[a[k][i]])
{df(a[k][i]);
}
}