Pagini recente » Cod sursa (job #2164114) | Profil zamfir10 | Cod sursa (job #2851314) | Cod sursa (job #2006078) | Cod sursa (job #1276640)
#include <fstream>
#include <stdlib.h>
#define NMAX 100004
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
struct nod{int nr;nod*urm;};
typedef nod*Lista;
Lista p,lis[NMAX],prim;int n,m,gr[NMAX];
void read();
void inserare(Lista&,int);
void solve();
void write();
void determina_ciclu(Lista,Lista&);
void stergere(Lista&,int);
int main()
{
read();
solve();
write();
cin.close();cout.close();
return 0;
}
void read()
{
int i,x,y;
cin>>n>>m;
for (i=1;i<=n;i++) lis[i]=NULL;
for (i=1;i<=m;i++)
{
cin>>x>>y;
inserare(lis[x],y);gr[x]++;
inserare(lis[y],x);gr[y]++;
}
for (i=1;i<=n;i++)
if (gr[i]%2==1)
{
cout<<"-1\n";
exit(0);
}
}
void inserare(Lista&prim,int nr)
{
Lista aux;
aux=new nod;
aux->nr=nr;
aux->urm=prim;
prim=aux;
}
void solve()
{
Lista p1,u1;int nr;
prim=new nod;
prim->nr=1;
prim->urm=NULL;
p1=new nod;
p1->nr=1;
p1->urm=NULL;
prim->urm=p1;
p=prim;
while (p!=NULL)
{
p1=new nod;
p1->nr=p->nr;
p1->urm=NULL;
u1=NULL;
determina_ciclu(p1,u1);
if (u1!=NULL){
u1->urm=p->urm;
p->urm=p1->urm;
}
p=p->urm;
}
}
void stergere(Lista&prim,int nr)
{
Lista p;
if (prim->nr==nr)
{
prim=prim->urm;
return;
}
p=prim;
while (p->urm!=NULL && p->urm->nr!=nr) p=p->urm;
p->urm=p->urm->urm;
}
void write()
{
while (prim->urm!=NULL)
{
cout<<prim->nr<<' ';
prim=prim->urm;
}
}
void determina_ciclu(Lista p,Lista& u1)
{
Lista u=p,aux;int nr;
while (lis[u->nr]!=NULL)
{
nr=lis[u->nr]->nr;
stergere(lis[nr],u->nr);
stergere(lis[u->nr],nr);
aux=new nod;
aux->nr=nr;
aux->urm=NULL;
u->urm=aux;
u1=u;
u=aux;
}
}