Cod sursa(job #583525)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 20 aprilie 2011 17:55:35
Problema Ciclu Eulerian Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<stdio.h>
#define N 100001
#define M 500001
long a[M],b[M],d[M],c[M]={0},i,n,m,k=1,g=0,deg[N]={0};
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]]++;}
d[1]=1;
while(k<=m&&g==0)
      {g=1;
      for(i=1;i<=m;i++)
      if(c[i]==0&&a[i]==d[k]&&deg[a[i]]>=1&&deg[b[i]]>1)
             {c[i]=1;
             d[++k]=b[i];
             deg[a[i]]--;
             deg[b[i]]--;
             g=0;
             break;}
      else
             if(c[i]==0&&b[i]==d[k]&&deg[a[i]]>1&&deg[b[i]]>=1)
                     {c[i]=1;
                     d[++k]=a[i];
                     deg[a[i]]--;
                     deg[b[i]]--;
                     g=0;
                     break;}}
if(k==m)
      {for(i=1;i<=m;i++)
             printf("%ld ",d[i]);}
else
      printf("-1");
fclose(stdin);
fclose(stdout);
return 0;}