Pagini recente » Cod sursa (job #12603) | Cod sursa (job #2876424) | Cod sursa (job #985819) | Cod sursa (job #2416094) | Cod sursa (job #688247)
Cod sursa(job #688247)
#include <cstdio>
#include <cassert>
#include <vector>
#define Nmax 100005
#define InFile "ciclueuler.in"
#define OutFile "ciclueuler.out"
#define pb push_back
using namespace std;
int n, m, mc;
int gr[Nmax];
vector <int> A[Nmax];
struct Nod {int vf; Nod *next, *prev;} *st, *fsh, *pr, *ult;
void read();
int check();
void solve();
void want_a_cicle(int);
void kill(int,int);
void write();
int main()
{
assert (freopen (InFile, "r", stdin));
assert (freopen (OutFile, "w", stdout));
read();
if (!check())
{
printf ("-1\n");
return 0;
}
solve();
write();
return 0;
}
void read()
{
int i, x, y;
scanf ("%d %d\n", &n, &m);
for (i=1; i<=m; i++)
{
scanf ("%d %d\n", &x, &y);
A[x].pb (y); gr[x]++;
A[y].pb (x); gr[y]++;
}
}
int check()
{
int i;
for (i=1; i<=n; i++)
if (gr[i]%2==1 || gr[i]==0)
return 0;
return 1;
}
void solve()
{
Nod *it;
//Ciclu MARE
st=new Nod;
fsh=new Nod;
st->next=fsh; st->prev=NULL;
fsh->prev=st; fsh->next=NULL;
//Ciclu MIC
pr=new Nod; ult=new Nod;
pr->vf=0; ult->vf=0;
want_a_cicle(1);
st->next=pr->next;
pr->next->prev=st;
fsh->prev=ult->prev;
ult->prev->next=fsh;
while (mc<m)
{
for (it=st->next; it!=fsh; it=it->next)
if (gr[it->vf])
{
want_a_cicle (it->vf);
break;
}
it->prev->next=pr->next;
pr->next->prev=it->prev;
ult->prev->next=it;
it->prev=ult->prev;
}
}
void want_a_cicle(int nd)
{
int i, x, y, lg;
Nod *el;
lg=A[nd].size();
pr->next=ult; pr->prev=NULL;
ult->prev=pr; ult->next=NULL;
x=nd;
do
{
el=new Nod;
el->vf=x;
el->next=ult;
ult->prev->next=el;
el->prev=ult->prev;
ult->prev=el;
lg=A[x].size();
for (i=0; i<lg; i++)
{
if (A[x][i])
{
y=A[x][i];
A[x][i]=0;
kill (y, x);
gr[x]--;
gr[y]--;
x=y;
mc++;
break;
}
}
}
while (x!=nd);
}
void kill (int nd, int x)
{
int i, lg=A[nd].size();
for (i=0; i<lg; i++)
if (A[nd][i]==x)
{
A[nd][i]=0;
break;
}
}
void write()
{
Nod *it;
for (it=st->next; it!=fsh; it=it->next)
printf ("%d ", it->vf);
printf ("\n");
}