Cod sursa(job #432596)

Utilizator adrianraduleaRadulea Adrian adrianradulea Data 2 aprilie 2010 15:49:41
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
FILE *f,*g;
int t[4][1200000],c[120000],fin[120000],x,y,z,v[1200000],nr,numar,n,m,i;
void ciclu(int k)
{ int 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; ciclu(t[1][p]); }
      p=t[2][p];
   }
  numar++; v[numar]=k;
}
int main()
{ f=fopen("ciclueuler.in","r"); g=fopen("ciclueuler.out","w");
  fscanf(f,"%d%d",&n,&m);
  for(i=1;i<=m;i++) 
  { fscanf(f,"%d%d",&x,&y); 
    if(c[x]==0) { nr++; c[x]=nr; fin[x]=nr; t[1][nr]=y; t[3][nr]=1; }
	else { nr++; t[2][fin[x]]=nr; t[1][nr]=y; fin[x]=nr; t[3][nr]=1; }
	z=x; x=y; y=z;
	if(c[x]==0) { nr++; c[x]=nr; fin[x]=nr; t[1][nr]=y; t[3][nr]=1;}
	else { nr++; t[2][fin[x]]=nr; t[1][nr]=y; fin[x]=nr; t[3][nr]=1; }
  }
  ciclu(1); 
  if(numar-1==m) for(i=1;i<numar;i++) fprintf(g,"%d ",v[i]); 
  else fprintf(g,"-1");
  fclose(g);
  return 0;
}