Pagini recente » Cod sursa (job #397508) | Cod sursa (job #1581024) | Cod sursa (job #1845530) | Cod sursa (job #962863) | Cod sursa (job #2377045)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct edge
{
int nod, id;
edge(int a, int b)
{
nod = a;
id = b;
}
};
int len = 0;
vector<vector<edge>> adl;
vector<bool> viz(500010, false);
vector<int> cycle(500010);
void euler(int nod)
{
while (adl[nod].empty() == false)
{
auto e = adl[nod].back();
adl[nod].pop_back();
if (!viz[e.id])
{
viz[e.id] = true;
euler(e.nod);
}
}
cycle[len++] = nod;
}
int main()
{
int n, m;
fin >> n >> m;
adl.resize(n + 1);
for (int i = 0; i < m; i++)
{
int x, y;
fin >> x >> y;
adl[x].push_back(edge(y, i));
adl[y].push_back(edge(x, i));
}
for (int i = 1; i <= n; i++)
if (adl[i].size() & 1)
{
fout << "-1\n";
return 0;
}
euler(1);
for (int i = 1; i < len; i++)
fout << cycle[i] << " ";
return 0;
}