Pagini recente » Cod sursa (job #2031071) | Cod sursa (job #881132) | Cod sursa (job #246863) | Cod sursa (job #977700) | Cod sursa (job #1869136)
#include<iostream>
#include<fstream>
#include <vector>
#include <list>
#include <algorithm>
std::ifstream fin("ciclueuler.in");
std::ofstream fout("ciclueuler.out");
std::list <int> nodes[100000];
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;
}