Cod sursa(job #692852)

Utilizator GrimpowRadu Andrei Grimpow Data 26 februarie 2012 20:09:45
Problema Ciclu Eulerian Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
#include<vector>
using namespace std;
int n,m,X[500500],Y[500500],sol[500500],nr;
bool viz[500500];
vector <int> G[100100];
ofstream g("ciclueuler.out");

inline void Citire()
{
	int i;
	ifstream f("ciclueuler.in");
	f>>n>>m;
	for(i=1;i<=m;i++)
	{
		f>>X[i]>>Y[i];
		G[X[i]].push_back(i);
		G[Y[i]].push_back(i);
	}
	f.close();
}

inline bool Eulerian()
{
	int i;
	for(i=1;i<=n;i++)
		if(G[i].size()%2==1)
			return false;
	return true;
}

inline void Euler(int nod)
{
	vector <int>::iterator it;
	for(it=G[nod].begin();it!=G[nod].end();it++)
	{
		if(!viz[*it])
		{
			viz[*it]=true;
			Euler(X[*it]+Y[*it]-nod);
		}
	}
	sol[++nr]=nod;
}

int main()
{
	Citire();
	bool ok=Eulerian();
	if(!ok)
	{
		g<<-1<<"\n";
		g.close();
		return 0;
	}
	else
	{
		int i;
		Euler(1);
		for(i=1;i<=nr;i++)
			g<<sol[i]<<' ';
		g<<"\n";
		g.close();
	}
	return 0;
}