Pagini recente » Cod sursa (job #2657186) | Cod sursa (job #2944427) | Cod sursa (job #2549562) | Cod sursa (job #1810264) | Cod sursa (job #2551335)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
const int nmax = 1e5 + 5;
stack < pair <int, int> > neigh[nmax];
void findCycle(int start, int m)
{
stack <int> stk;
vector <int> removed(m + 1, 0);
stk.push(start);
while (!stk.empty())
{
int node = stk.top();
if (neigh[node].empty())
{
stk.pop();
if (!stk.empty())
g << node << " ";
}
else
{
auto edge = neigh[node].top();
neigh[node].pop();
int id = edge.first;
int next = edge.second;
if (removed[id])
continue;
removed[id] = 1;
stk.push(next);
}
}
}
int main()
{
int n, m;
f >> n >> m;
for (int i = 1; i <= m; ++ i)
{
int u, v;
f >> u >> v;
neigh[u].push({i, v});
neigh[v].push({i, u});
}
for (int node = 1; node <= n; ++ node)
if (neigh[node].size() % 2 == 1)
{
g << -1;
return 0;
}
findCycle(1, m);
}