Pagini recente » Cod sursa (job #452334) | Cod sursa (job #2916670) | Cod sursa (job #3194508) | Cod sursa (job #1396774) | Cod sursa (job #272159)
Cod sursa(job #272159)
#include<fstream.h>
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int Nmax=101000;
const int Mmax=501000;
struct elem
{ int inf;
elem *urm;
}*a[Nmax];
long n,m,nr,st[Mmax],b[Mmax],d[Nmax],viz[Nmax];
void add(long x,long y)
{
elem *p=new elem;
p->inf =y;
p->urm=a[x];
a[x]=p;
}
void citire()
{
long x,y;
f>>n>>m;
for(long i=0;i<m;i++)
{
f>>x>>y;
d[x]++;
d[y]++;
add(x,y);
add(y,x);
}
}
void afisare()
{
for(int i=1;i<nr;i++)
{
g<<b[i]<<" ";
}
}
void df(int x)
{
viz[x]=1;
for(elem *p=a[x];p;p=p->urm)
if(!viz[p->inf])
df(p->inf);
}
int grad()
{
for(int i=1;i<=n;i++)
if(d[i]%2!=0 || viz[i]==0)
return 0;
return 1;
}
void sterge(long x,long y)
{
elem *p=a[x];
a[x]=a[x]->urm;
delete p;
if(a[y]->inf!=x)
{
for(p=a[y];p->urm;p=p->urm)
if(p->urm->inf==x)
{
p->urm=p->urm->urm;
break;
}
}
else
a[y]=a[y]->urm;
}
void stiva(long niv,long x)
{
st[niv]=x;
if(a[x])
{
long y=a[x]->inf;
sterge(x,y);
stiva(niv+1,y);
}
b[++nr]=st[niv];
}
int main()
{
citire();
if(grad())
{
{
stiva(0,1);
afisare();
}
else
g<<-1<<'\n';
g.close();
return 0;
}