Cod sursa(job #796942)

Utilizator GrimpowRadu Andrei Grimpow Data 13 octombrie 2012 00:05:08
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<iostream>
#include<fstream>
#include<list>
#include<stack>
#include<queue>
using namespace std;
#define pb push_back
list< int > G[100100], L;
stack< int > Sol;
int n, m, deg[100100], col[100100];




void erasee(int v,int w)
{
	deg[v]--;
	deg[w]--;
	G[v].pop_front();
	for( typeof(G[w].begin()) it = G[w].begin(); it != G[w].end(); it++ )
		if(*it==v)
		{
			G[w].erase(it);
			break;
		}
}

void euler()
{
	int w,v;
	v=1;
	do
	{
		while(true)
		{
			if( G[v].empty() )
				break;
			w=G[v].front();
			Sol.push(v);
			erasee (v, w);
			v=w;
		}
		v = Sol.top(); Sol.pop();
		L.pb( v );
	}while( !Sol.empty() );
}
ofstream g("ciclueuler.out");
void scrie()
{
	for( typeof(L.begin()) it = L.begin(); it != L.end(); it++ )
		g<<*it<<' ';
	g<<'\n';
}

int main()
{
	int v,u,i;
	ifstream f("ciclueuler.in");
	
	f>>n>>m;
	for(i=0;i<m;++i)
	{
		f>>u>>v;
		G[u].pb(v); deg[v]++;
		G[v].pb(u); deg[u]++;
	}
	f.close();
    euler();
	scrie();
	return 0;
}