Pagini recente » Profil OrzataAndrei | Cod sursa (job #2073844) | Cod sursa (job #295637) | Cod sursa (job #134628) | Cod sursa (job #278549)
Cod sursa(job #278549)
#include <cstdio>
using namespace std;
struct nod
{
nod *next;
int val,nr;
}*a[100005];
int n,m,grad[100005],r=-1,viz[500005];
void add(int x, int y)
{
nod *p;
p=new nod;
p->val=y;
p->next=a[x];
p->nr=r;
a[x]=p;
}
void citire()
{
freopen("ciclueuler.in","r",stdin);
scanf("%d%d", &n, &m);
int x,y;
for (int i=1; i<=n; i++)
{
a[i]=new nod;
a[i]=NULL;
}
for (int i=0; i<m; i++)
{
scanf("%d%d", &x, &y);
++r;
add(x,y);
grad[x]++;
grad[y]++;
if (x!=y)
add(y,x);
}
}
int verificare()
{
for (int i=1; i<=n; i++)
if (grad[i]%2==1)
return 0;
return 1;
}
void euler(int w)
{
//while (a[w])
for (int i=1; i<m; i++)
{
while (viz[a[w]->nr])
a[w]=a[w]->next;
viz[a[w]->nr]=1;
printf("%d ",a[w]->val);
int x=a[w]->val;
a[w]=a[w]->next;
w=x;
}
}
int main()
{
freopen("ciclueuler.out","w",stdout);
citire();
if (!verificare())
printf("-1\n");
else
{
printf("1 ");
euler(1);
}
return 0;
}