Cod sursa(job #263479)

Utilizator mariusdrgdragus marius mariusdrg Data 20 februarie 2009 14:22:34
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include<stdio.h>
#include<malloc.h>

const int maxn = 140000;

struct nod
{
	int vec;
	int poz;
	nod* next;
};


nod* M[maxn];
int N,MU;
int VER[maxn];
int GR[maxn];

void introduce(int vecin,int pozitie,int cur)
{
	nod* nou = new nod;
	nou -> vec = vecin;
	nou -> poz = pozitie;
	nou ->next = M[cur];
	M[cur] = nou;
}

void dfs(int x)
{
	for(nod* cur = M[x];cur != NULL; cur = cur -> next)
	{
		if (VER[cur -> poz]) continue;
		VER[cur -> poz] = 1;
		dfs(cur -> vec);
		printf("%d ",x);
	}
}

int main()
{
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
	scanf("%d %d\n",&N,&MU);
	int i;
	for(i = 1;i <= MU; ++i)
	{
		int x = 0,y = 0;
		scanf("%d %d\n",&x,&y);
		introduce(y,i,x);
		introduce(x,i,y);
		GR[x]++;GR[y]++;
	}
	for(i = 1;i <= N; ++i)
		if (GR[i] % 2 == 1) {printf("-1\n");return 0;}
	dfs(1);
	return 0;
}