Pagini recente » Cod sursa (job #2030824) | Cod sursa (job #1901567) | Cod sursa (job #1033285) | Cod sursa (job #270089) | Cod sursa (job #308541)
Cod sursa(job #308541)
#include<stdio.h>
#define N 100005
#define M 500008
int n,m,*a[N],x[M],y[M],d[N],c[M],*poz[N],nr=0;
void citire()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x[i],&y[i]);
++d[x[i]];
if(x[i]!=y[i])
++d[y[i]];
}
for(int i=1;i<=n;i++)
{
a[i]=new int[d[i]+1];
poz[i]=new int [d[i]+1];
a[i][0]=0;
}
for(int i=1;i<=m;i++)
{
a[x[i]][++a[x[i]][0]]=y[i];
if(x[i]!=y[i])
{
a[y[i]][++a[y[i]][0]]=x[i];
poz[x[i]][a[x[i]][0]]=a[y[i]][0];
poz[y[i]][a[y[i]][0]]=a[x[i]][0];
}
}
}
void afisareproba()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=a[i][0];j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
void afisare()
{
for(int i=1;i<nr;i++)
printf("%d ",c[i]);
}
void euler(int x)
{
int i,j,y;
for(i=1;i<=a[x][0];i++)
if(a[x][i])
{
y=a[x][i];
a[x][i]=0;
if(x!=y)
{
j=poz[x][i];
a[y][j]=0;
}
euler(y);
}
c[++nr]=x;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
euler(1);
if(nr==m+1)
afisare();
else
printf("-1");
//afisareproba();
return 0;
}