Pagini recente » Cod sursa (job #2991033) | Cod sursa (job #2425191) | Cod sursa (job #1040991) | Cod sursa (job #2486766) | Cod sursa (job #432712)
Cod sursa(job #432712)
#include<stdio.h>
FILE *f,*g;
int t[4][2000000],c[200000],fin[200000],x,y,z,v[2000000],nr,numar,n,m,i,viz[200000],grad[200000],ok;
inline void ciclu(long k)
{ int p=c[k]; if(grad[k]%2==0) {
while(p&&numar<=m+10)
{ if(!t[3][p]) { t[3][p]=1; if(p%2==0) t[3][p-1]=1; else t[3][p+1]=1; ciclu(t[1][p]); }
p=t[2][p];
}
numar++; v[numar]=k; } else ok=0;
}
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; grad[x]++; }
else { nr++; t[2][fin[x]]=nr; t[1][nr]=y; fin[x]=nr; grad[x]++;}
z=x; x=y; y=z;
if(c[x]==0) { nr++; c[x]=nr; fin[x]=nr; t[1][nr]=y; grad[x]++;}
else { nr++; t[2][fin[x]]=nr; t[1][nr]=y; fin[x]=nr; grad[x]++;}
}
ok=1; ciclu(1);
if(numar-1==m&&ok) for(i=1;i<numar;i++) fprintf(g,"%d ",v[i]); else fprintf(g,"-1");
fclose(g);
return 0;
}