Cod sursa(job #316436)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 19 mai 2009 17:49:54
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<stdio.h>
FILE *f,*g;
long c[100005],t[4][1000099],n,m,liber,i,x,y,fin[100111],aux,v[700011],nr;

void euler(long k)
{ long p=c[k];
  while(p)
   {  if(t[3][p]) { t[3][p]=0; if(p%2==0) t[3][p-1]=0; else t[3][p+1]=0; euler(t[1][p]); }
      p=t[2][p];
   }
 nr++; v[nr]=k;
}
int main()
{ f=fopen("ciclueuler.in","r"); g=fopen("ciclueuler.out","w");
  fscanf(f,"%ld%ld",&n,&m);
  liber=1; nr=0;
  for(i=1;i<=m;i++)
   { fscanf(f,"%ld%d",&x,&y);
     if(!c[x])
      { c[x]=liber; t[1][liber]=y; t[3][liber]=1; fin[x]=liber; liber++; }
     else
      { t[2][fin[x]]=liber; t[1][liber]=y; t[3][liber]=1; fin[x]=liber; liber++; }
     aux=x; x=y; y=aux;
     if(!c[x])
      { c[x]=liber; t[1][liber]=y; t[3][liber]=1; fin[x]=liber; liber++; }
     else
      { t[2][fin[x]]=liber; t[1][liber]=y; t[3][liber]=1; fin[x]=liber; liber++; }
   }
  euler(1);
  if(nr==m+1) for(i=nr;i>=2;i--) fprintf(g,"%ld ",v[i]); else fprintf(g,"-1");
  fclose(g);
  return 0;
}