Cod sursa(job #864308)

Utilizator deea101Andreea deea101 Data 24 ianuarie 2013 20:55:55
Problema Ciclu Eulerian Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>
#include <list>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector <int> vec[100001];
list <int> v;
list <int>:: iterator it;
int n;
int eulerian()
{
	for(int i=1;i<=n;i++)
		if(vec[i][0]%2==1) return 0;
	return 1;
}
int main()
{
	int i,m,x,y,nod,nr=1;
	f>>n>>m;
	for(i=1;i<=n;i++)
		vec[i].push_back(0);
	for(i=1;i<=m;i++)
	{
		f>>x>>y;
		vec[x].push_back(y); vec[x][0]++;
		vec[y].push_back(x); vec[y][0]++;
	}
	if(eulerian())
	{
		v.push_back(1);
		while(!v.empty())
		{
			nod=*v.begin();
			if(vec[nod].size()>1)
			{
				x=vec[nod][1];
				v.push_front(x);
				vec[nod][1]=vec[nod][vec[nod].size()-1];
				vec[nod].pop_back();
				for(i=1;i<vec[x].size();i++)
					if(vec[x][i]==nod)
					{
						vec[x][i]=vec[x][vec[x].size()-1];
						vec[x].pop_back();
						break;
					}
			}
			else 
			{ 
				if(nr<=m) 
				{ 
					g<<*v.begin()<<' '; nr++;
				}
				v.pop_front();
			}
		}
	}
}