Cod sursa(job #755395)

Utilizator cahemanCasian Patrascanu caheman Data 5 iunie 2012 16:27:53
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<stdio.h>
#include<vector>
#include<queue>
using namespace std;
vector <int> mat[100001];
int v[500005];
int n,m,x,y,t;
void euler()
{
	int i,j;
	x=1;
	v[++v[0]]=x;
	for(i=1;i<=m;i++)
	{
		while(mat[x][mat[x].size()-1]==0&&mat[x].size()>1)
		{
			mat[x].pop_back();
		}
		y=mat[x][mat[x].size()-1];
		if(y==0)
		{
			printf("-1\n");
			return ;
		}
		for(j=mat[x].size()-1;j>=0;j--)
			if(mat[x][j]==y)
			{
				mat[x][j]=0;
				break;
			}
		if(x!=y)
			for(j=mat[y].size()-1;j>=0;j--)
				if(mat[y][j]==x)
				{
					mat[y][j]=0;
					break;
				}
		x=y;	
		v[++v[0]]=x;
	}
	for(i=1;i<=m;i++)
		printf("%d ",v[i]);
	printf("\n");
}
int main()
{
	freopen("ciclueuler.in","r",stdin);
	freopen("ciclueuler.out","w",stdout);
	int i;
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&x,&y);
		mat[x].push_back(y);
		mat[y].push_back(x);
	}
	euler();
	return 0;
}