Pagini recente » Cod sursa (job #2884348) | Cod sursa (job #579068) | Cod sursa (job #233704) | Cod sursa (job #1458368) | Cod sursa (job #583542)
Cod sursa(job #583542)
#include<stdio.h>
#include<stdlib.h>
#define N 100001
#define M 500001
long a[M],b[M],d[M],c[M]={0},i,n,m,k=0,l=0,deg[N]={0},*g[N],*h[N],x,j;
int main()
{freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%ld%ld\n",&n,&m);
for(i=1;i<=m;i++)
{scanf("%ld%ld\n",&a[i],&b[i]);
deg[a[i]]++;
deg[b[i]]++;}
for(i=1;i<=n;i++)
{g[i]=(long*)malloc(deg[i]*sizeof(long));
h[i]=(long*)malloc(deg[i]*sizeof(long));
deg[i]=0;}
for(i=1;i<=m;i++)
{g[a[i]][deg[a[i]]]=b[i];
h[a[i]][deg[a[i]]]=0;
deg[a[i]]++;
g[b[i]][deg[b[i]]++]=a[i];
h[b[i]][deg[b[i]]]=0;
deg[b[i]]++;}
d[k]=1;
while(k<=m&&l==0)
{l=1;
for(i=deg[d[k]]-1;i>=0;i--)
if(h[d[k]][i]==0)
{h[d[k]][i]=1;
deg[d[k]]--;
x=g[d[k]][i];
for(j=0;j<deg[x];j++)
if(g[x][j]==d[k]&&h[x][j]==0)
{h[x][j]=1;
break;}
d[++k]=x;
l=0;
break;}}
if(k==m)
{for(i=1;i<=m;i++)
printf("%ld ",d[i]);}
else
printf("-1");
fclose(stdin);
fclose(stdout);
return 0;}