Cod sursa(job #631674)

Utilizator hunter_ionutzzzFarcas Ionut hunter_ionutzzz Data 9 noiembrie 2011 15:34:58
Problema Ciclu Eulerian Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<fstream>
#include<list>
#include<vector>
using namespace std;
ifstream fin("eulerian.in");
ofstream fout("eulerian.out");
int n,a,b,j=1,i,eul[1001],aux[1001],m;

list<int> v[10001];
list<int>::iterator it;

int merg(int x)
{   if (v[x].front() != 0)
	{   ++j; 
        aux[j] = v[x].front();
	    v[x].pop_front();
	    it = v[aux[j]].begin();
        v[aux[j]].remove(x);
	    merg(aux[j]);
	}
	return 0;
}
int adaug()
{int ok=0,x;
    while (ok != 1)
	{   ok = 1;
        i = 1;
		while (v[i].front() == 0 && i < n)
			++i;
		if (i == n)
		{   for (i=1;i<=j;++i)
		        fout << eul[i] << " ";
		    return 0;
		}
		else
		{   j = 1;
		    aux[1] = i;
			merg(i);
			i = 1;
			while (eul[i] != aux[1] && i <= m)
				++i;
			for (x=1;x<j;++x)
			{	eul[m+x+1] = eul[i+x];
		        eul[i+x] = aux[x+1];
			}
			m = m + j -1;
		}
	}
	return 0;
}

int main()
{   fin >> n;
    for(i=1;i<=n;++i)
		v[i].push_front(0);
	while (fin >> a >> b)
	{   v[a].push_front(b);
	    v[b].push_front(a);
	}
	aux[1] = 1;
	merg(1);
	m = j;
	for (i=1;i<=m;++i)
		eul[i] = aux[i];
	adaug();

	return 0;
}