Cod sursa(job #308554)

Utilizator andreea_mandreea martinovici andreea_m Data 27 aprilie 2009 18:31:36
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include<stdio.h>
#include<vector>
#define N 100005
#define M 500008
using namespace std;
int n,m,d[N],c[M],nr=0;
vector<int> a[N],poz[N];
void citire()
{
	int i,m,x,y;
	scanf("%d%d",&n,&m);
	for(i=1 ; i<=m ; ++i)
	{
		scanf("%d%d",&x,&y);
		a[x].push_back(y);
		if(x!=y)
		{
			a[y].push_back(x);
			poz[x].push_back(a[y].size()-1);
			poz[y].push_back(a[x].size()-1);
		}
	}
}
void afisareproba()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<a[i].size();j++)
			printf("(%d, poz=%d) ",a[i][j],poz[i][j]);
		printf("\n");
	}
}

void afisare()
{
	for(int i=1;i<nr;i++)
		printf("%d ",c[i]);
}

void euler(int x)
{
	int i,j,y,nx=a[x].size();
	for(i=0;i<nx;i++)
		if(a[x][i])
		{
			y=a[x][i];
			a[x][i]=0;
			if(x!=y)
			{
				j=poz[x][i];
				a[y][j]=0;
			}
			euler(y);
		}
	c[++nr]=x;
}
int main()
{
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
	citire();
	euler(1);
	
	if(nr==m+1)
		afisare();
	else
		printf("-1");
	
	//afisareproba();
	return 0;
}