Pagini recente » Cod sursa (job #2786376) | Cod sursa (job #1621931) | Cod sursa (job #2083256) | Cod sursa (job #1098839) | Cod sursa (job #1112858)
#include<cstdio>
#include<fstream>
using namespace std;
#define Nmax 100001
#define ss 500001
FILE*f=fopen("ciclueuler.in","r");
FILE*g=fopen("ciclueuler.out","w");
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) fprintf(g,"%d ",sol[i]);
}
int check()
{
int i;
for(i=1;i<=n;++i) if(grad[i]%2==1) return 0;
return 1;
}
void read()
{
fscanf(f,"%d %d",&n,&m);
int x,y;
while(m--)
{
fscanf(f,"%d %d",&x,&y);
insert(x,y);
}
}
int main()
{
read();
if(check()==0) fprintf(g,"-1\n");
else euler();
return 0;
}