Pagini recente » Cod sursa (job #1603544) | Cod sursa (job #2671467) | Cod sursa (job #2630364) | Cod sursa (job #704631) | Cod sursa (job #272153)
Cod sursa(job #272153)
#include <fstream.h>
#define nmax (100005)
#define mmax (500005)
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct lista {long nod; lista *urm;};
long n,m,nr;
char sw;
char v[nmax];
lista *eul, *a[mmax];
void df(long k)
{long i;
lista *p;
v[k]=1;
nr++;
for (p=a[k];p;p=p->urm)
if (!v[p->nod])
df(p->nod);
}
int conex()
{df(1);
return nr==n;
}
void sterge(long x, long y)
{lista *p,*t;
t=0;
for (p=a[x]; p && p->nod!=y; p=p->urm)
t=p;
if (t)
t->urm=p->urm;
else
a[x]=a[x]->urm;
}
void ciclu(lista *e)
{long i,k;
lista *p,*d;
k=e->nod;
for (;a[k];a[k]=a[k]->urm)
{ i=a[k]->nod;
sterge(i,k);
sterge(k,i);
d=new lista;
d->nod=i;
d->urm=e->urm;
e->urm=d;
e=e->urm;
ciclu(e);
}
}
void rezolva()
{lista *E,*D;
eul=new lista;
eul->nod=1;
eul->urm=0;
for (E=eul;E;E=E->urm)
ciclu(E);
while (eul)
{fout<<eul->nod<<" ";
eul=eul->urm;
}
}
void add(long x, long y)
{lista *p;
p=new lista;
p->nod=y;
p->urm=a[x];
a[x]=p;
}
int main()
{long i,x,y;
fin>>n>>m;
for (i=1;i<=m;i++)
{fin>>x>>y;
add(x,y);
v[x]++;
v[y]++;
if(x!=y)
add(y,x);
}
for (i=1;i<=n && !sw;i++)
if (v[i]%2==1) sw=1;
memset(v,0,sizeof(v));
if (!sw && conex())
rezolva();
else fout<<"-1";
fout.close();
return 0;
}