Pagini recente » Cod sursa (job #3213558) | Cod sursa (job #2804198) | Cod sursa (job #36942) | Cod sursa (job #2667998) | Cod sursa (job #632734)
Cod sursa(job #632734)
#include <stdio.h>
#include <stack>
#include <queue>
#define nMax 100100
using namespace std;
int n;
int m;
int grad[nMax];
struct nod{
int x;
nod *urm;
}*a[nMax];
stack <int> s;
queue <int> afis;
void citire()
{
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++)
{
int x;
int y;
scanf("%d%d",&x,&y);
grad[x]++;
grad[y]++;
nod *g;
g = new nod;
g -> x = x;
g -> urm = a[y];
a[y] = g;
nod *h;
h = new nod;
h -> x = y;
h -> urm = a[x];
a[x]=h;
}
}
void sterge(int x, int y)
{
if(a[x]->x == y)
{
a[x]=a[x]->urm;
return;
}
for(nod *i=a[x]; i->urm; i=i->urm)
{
if(i->urm->x==y)
{
i->urm=i->urm->urm;
break;
}
}
}
void euler(int v)
{
while(a[v])
{
int altfel=a[v]->x;
s.push(altfel);
a[v]=a[v]->urm;
sterge(altfel,v);
v=altfel;
}
}
void intelegemSolutiaLorSiIncercamSaOScriemSiNoi(int v) //functie denumita de PI
{
do{
euler(v);
int x=s.top();
s.pop();
afis.push(x);
}while(!s.empty());
}
void rez()
{
for(int i=0;i<=n;i++)
{
if(grad[i]!=0)
{
intelegemSolutiaLorSiIncercamSaOScriemSiNoi(i);
return;
}
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("cilcueuler.out","w",stdout);
citire();
for(int i=0;i<=n;i++)
{
if(grad[i]%2==1)
{
printf("-1");
return 0;
}
}
rez();
for(int i=0;i<=n;i++)
{
if(a[i])
{
printf("-1");
return 0;
}
}
while(!afis.empty())
{
printf("%d ",afis.front());
afis.pop();
}
return 0;
}