Pagini recente » Cod sursa (job #1009822) | Cod sursa (job #2795411) | Cod sursa (job #2740623) | Cod sursa (job #1864018) | Cod sursa (job #270106)
Cod sursa(job #270106)
#include<stdio.h>
#define nmax 100010
#define mmax 500010
long s[mmax], x[mmax], gr[nmax], n, m, k, o;
char vz[nmax];
struct elem
{ long vf;
elem *urm;
} *a[nmax], *q;
FILE *f, *g;
void read()
{ long i, x, y;
fscanf(f, "%ld%ld", &n, &m);
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;
}
}
int check()
{ long cd[nmax], i, p, u;
for(i=1; i<=n; i++)
if(gr[i]%2==1)
return 0;
p=1; u=1; cd[1]=1;
while(p<=u)
{ for(q=a[cd[p]]; q; q=q->urm)
if(vz[q->vf]==0)
{ u++;
cd[u]=q->vf; vz[q->vf]=1;
}
p++;
}
for(i=1; i<=n; i++)
if(vz[i]==0)
return 0;
return 1;
}
void del(long x, long y)
{ elem *z;
for(q->urm=a[x]; q->urm; q=q->urm)
{ if(q->urm->vf==y)
{ z=q->urm;
q->urm=q->urm->urm;
delete z;
}
break;
}
for(q->urm=a[y]; q->urm; q=q->urm)
{ if(q->urm->vf==x)
{ z=q->urm;
q->urm=q->urm->urm;
delete z;
}
break;
}
}
void df(long z, long k)
{ elem *q;
s[k]=z;
del(s[k], s[k-1]);
for(q=a[z]; q; q=q->urm)
{ df(q->vf, k+1);
x[++o]=q->vf;
}
}
int main()
{ f=fopen("ciclueuler.in", "r");
g=fopen("ciclueuler.out", "w");
read();
if(check)
df(1, 1);
else
fprintf(g, "-1\n");
fclose(g);
return 0;
}