Pagini recente » Cod sursa (job #2180126) | Cod sursa (job #2075772) | Cod sursa (job #98143) | Cod sursa (job #2841499) | Cod sursa (job #270762)
Cod sursa(job #270762)
#include<stdio.h>
#define nmax 100010
#define mmax 500010
long s[mmax], vz[nmax], n, m;
struct elem
{ long vf;
elem *urm;
} *a[nmax], *q;
FILE *f, *g;
int read()
{ long gr[nmax], i, x, y;
fscanf(f, "%ld%ld", &n, &m);
for(i=1; i<=n; i++)
gr[i]=0;
for(i=1; i<=m; i++)
{ fscanf(f, "%ld%ld", &x, &y);
gr[x]++; gr[y]++;
q=new elem;
q->vf=y; q->urm=a[x];
a[x]=q;
q=new elem;
q->vf=x; q->urm=a[y];
a[y]=q;
}
for(i=1; i<=n; i++)
if(gr[i]%2==1)
return 0;
return 1;
}
void df1(long z, long k)
{ elem *q;
vz[z]=1;
for(q=a[z]; q; q=q->urm)
if(!vz[q->vf])
df1(q->vf, k+1);
}
int check()
{ long i;
df1(1, 1);
for(i=1; i<=n; i++)
if(vz[i]==0)
return 0;
return 1;
}
void del(int x,int y){
elem* q,*r,*p;
q=a[x];
a[x]=a[x]->urm;
delete(q);
if(a[y]->vf==x){
p=a[y];
a[y]=a[y]->urm;
delete(p);
}
else
for(r=a[y];r->urm;r=r->urm)
if(r->urm->vf==x){
p=r->urm;
r->urm=r->urm->urm;
delete (p);
break;
}
}
void solve()
{
int sol[mmax];
int x,vf,k=0,i;
vf=1;
s[vf]=1;
while(vf){
x=s[vf];
if(a[x]!=NULL){
s[++vf]=a[x]->vf;
del(x,a[x]->vf);
}
else sol[++k]=s[vf--];
}
for(i=1;i<k;i++)
fprintf(g,"%d ",sol[i]);
}
int main()
{
f=fopen("ciclueuler.in", "r");
g=fopen("ciclueuler.out", "w");
if(read())
if(check())
solve();
else
fprintf(g, "-1\n");
else
fprintf(g, "-1\n");
return 0;
}