Pagini recente » Cod sursa (job #2538307) | Cod sursa (job #3253488) | Cod sursa (job #378726) | Cod sursa (job #2922160) | Cod sursa (job #876510)
Cod sursa(job #876510)
#include<stdio.h>
#include<list>
#include<algorithm>
using namespace std;
#define nmax 100005
struct element{long t, n;};
long a, b, i, j, n, m, gr[nmax];
bool ok, viz[nmax];
list <element> ma[nmax];
element el;
void citire()
{
scanf("%ld %ld",&n,&m);
for (i=1;i<=m;i++)
{
scanf("%ld %ld",&a,&b);
el.t=0; el.n=b; ma[a].push_back(el);
el.t=0; el.n=a; ma[b].push_back(el);
gr[a]++; gr[b]++;
}
}
void dfs(long nod)
{
list <element> ::iterator it, it1;
element el;
viz[nod]=1;
for (it=ma[nod].begin();it!=ma[nod].end();it++)
if (!viz[(*it).n])
{
el=*it;
el.t=1;
dfs(el.n);
for (it1=ma[el.n].begin();it1!=ma[el.n].end();it1++)
if ((*it1).n==nod)
{ (*it1).t=1; break; }
}
else
if ((*it).t==0)
(*it).t=-1;
}
void verificare()
{
ok=1;
for (i=1;i<=n;i++)
ok=ok&&(gr[i]%2==0)&&(viz[i]);
if (!ok)
printf("-1\n");
}
bool cmp(element a, element b)
{ return (a.t<b.t); }
void parcurgere(long nod)
{
list <element> ::iterator it;
element el;
printf("%ld ",nod);
while (ma[nod].size())
{
el=ma[nod].front(); ma[nod].pop_front();
for (it=ma[el.n].begin();it!=ma[el.n].end();it++)
if ((*it).n==nod)
{ ma[el.n].erase(it); break; }
parcurgere(el.n);
}
}
void rezolvare()
{
for (i=1;i<=n;i++)
ma[i].sort(cmp);
parcurgere(1);
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
citire();
dfs(1);
verificare();
if (ok)
rezolvare();
return 0;
}