Cod sursa(job #728468)

Utilizator gabriel93Robu Gabriel gabriel93 Data 28 martie 2012 19:07:11
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
#include<vector>
#define Nmax 100002
using namespace std;
int n,m;

vector< pair <int,int> > g[Nmax];
int nr[Nmax];
char viz[Nmax];
int st[5*Nmax];

void citire()
{
	int i,x,y;
	scanf("%d %d",&n,&m);
	for(i=1;i<=m;++i)
	{
		scanf("%d %d",&x,&y);
		g[x].push_back(make_pair(y,i));
		g[y].push_back(make_pair(x,i));
		++nr[x];
		++nr[y];
	}
}

void dfs(int x)
{
	vector<pair <int,int> >::iterator it;
	for(it=g[x].begin();it!=g[x].end();++it)
		if(viz[(*it).second]==0)
		{
			viz[(*it).second]=1;
			dfs((*it).first);
			printf("%d ",x);
		}
}

int main()
{
	int i,ok;
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
	citire();
	ok=1;
	for(i=1;i<=n;++i)
		if(nr[i]&1)
		{
			ok=0;
			printf("-1");
			break;
		}
	if(ok)
		dfs(1);
	fclose(stdin);
	fclose(stdout);
	return 0;
}