Pagini recente » Cod sursa (job #460564) | Cod sursa (job #2507776) | Cod sursa (job #2265857) | Cod sursa (job #1279048) | Cod sursa (job #373458)
Cod sursa(job #373458)
#include <stdio.h>
#define max 100010
struct lista
{
int nod;
lista *next;
};
lista *g[max];
int n,m,i,j,k,top,stack[5*max],deg[max];
void erase(int v,int w)
{
lista *p,*q,*r;
q=g[v];
g[v]=g[v]->next;
delete q;
if(g[w]->nod==v)
{
p=g[w];
g[w]=g[w]->next;
delete p;
}
else
{
for(r=g[w]; r->next; r=r->next)
if(r->next->nod==v)
{
p=r->next;
r->next=r->next->next;
delete p;
break;
}
}
}
void euler(int v)
{
int w;
stack[++top]=v;
while(top)
{
w=stack[top];
if(g[w]!=NULL)
{
stack[++top]=g[w]->nod;
erase(w,g[w]->nod);
}
else printf("%d ",stack[top--]);
}
}
void push(int i,int j)
{
lista *p=new lista;
p->nod=j;
p->next=g[i];
g[i]=p;
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
for(; m>0; m--)
{
scanf("%d%d",&i,&j);
push(i,j);
push(j,i);
deg[i]++; deg[j]++;
}
for(i=1; i<=n; i++)
if(deg[i]%2==1) { printf("-1"); return 0; }
euler(1);
return 0;
}