Pagini recente » Cod sursa (job #173595) | Cod sursa (job #498044) | Cod sursa (job #1087113) | Cod sursa (job #2245551) | Cod sursa (job #2525958)
#include<fstream>
using namespace std;
#define Nmax 100001
#define ss 500001
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m, grad[Nmax];
struct nod
{
int info;
nod *urm;
};
nod *prim[Nmax];
void insert(int x, int y)
{
nod *p,*q;
grad[x]++;
grad[y]++;
p=new nod;
p->info=y;
p->urm=prim[x];
prim[x]=p;
q=new nod;
q->info=x;
q->urm=prim[y];
prim[y]=q;
}
void elim(int x, int y) //elimin muchia x,y
{
// sterg prim[x]
nod *q;
q=prim[x];
prim[x]=prim[x]->urm;
delete(q);
nod *p,*r;
if(prim[y]->info == x)
{
p=prim[y];
prim[y]=prim[y]->urm;
delete(p);
}
else
for(r=prim[y]; r->urm; r=r->urm)
if(r->urm->info == x)
{
p=r->urm;
r->urm = r->urm->urm;
delete(p);
break;
}
}
void euler()
{
int x,vf, st[ss], sol[ss],k=0;
nod *q;
vf=0;
st[++vf]=1;
while(vf)
{
x=st[vf];
if(prim[x]!=NULL)
{
st[++vf]=prim[x]->info;
elim(x, prim[x]->info);
}
else sol[++k]=st[vf--];
}
for(int i=1; i<k; i++) g<<sol[i]<<" ";
}
int check()
{
int i;
for(i=1; i<=n; i++) if(grad[i]%2==1) return 0;
return 1;
}
void read()
{
f>>n>>m;
int x,y;
while(m--)
{
f>>x>>y;
insert(x,y);
}
}
int main()
{
read();
if(check()==0) g<<-1;
else euler();
return 0;
}