Cod sursa(job #1869142)

Utilizator loghin.alexandruLoghin Alexandru loghin.alexandru Data 5 februarie 2017 16:57:19
Problema Ciclu Eulerian Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb


#include<iostream>
#include<fstream>
#include <vector>
#include <list>
#include <algorithm>

std::ifstream fin("ciclueuler.in");
std::ofstream fout("ciclueuler.out");

std::list <int> nodes[100005];
std::vector<int> output;

int vecin;
int i;
bool ok;

void checkEulerCycle(std::list<int> nodes[], int node, int n)
{
	while (nodes[node].size())
	{
		ok = false;
		vecin = nodes[node].front();
		nodes[node].pop_front();
		nodes[vecin].remove_if([=](int n) {
			if (ok == false)
			{
				if (node==n)
				{
					ok = true;
				}
				return node == n;

			}
			else return false;
		}
		);
		checkEulerCycle(nodes, vecin, n);
	}
	output.push_back(node);
}

int main()
{
	int x, y;
	int n, m;
	fin >> n >> m;
	for (auto i = 0; i < m; i++)
	{
		fin >> x >> y;
		nodes[x].push_back(y);
		nodes[y].push_back(x);
	}
	if (n && m)
	{
		checkEulerCycle(nodes, 1, n);
	}
	if (output.size())
	{
		std::reverse(output.begin(), output.end());
		if (output[0] == output[output.size()-1])
		{
			output.pop_back();
			for (auto x : output)
			{
				fout << x << ' ';

			}

		}
	}
	else
	{
		fout << -1;
	}

    return 0;
}