Pagini recente » Cod sursa (job #2454947) | Cod sursa (job #2807107) | Cod sursa (job #1444965) | Cod sursa (job #2439326) | Cod sursa (job #2641321)
#include <fstream>
#include <algorithm>
#include <stack>
#include <vector>
std::ifstream fin("ciclueuler.in");
std::ofstream fout("ciclueuler.out");
const int NMAX = 1e5 + 2;
std::vector <int> g[NMAX];
void euler()
{
std::stack <int> st;
st.push(1);
std::vector <int> cycle;
while (!st.empty())
{
int node = st.top();
if (g[node].begin() != g[node].end())
{
int new_node = g[node].back();
g[node].pop_back();
g[new_node].erase(std::find(g[new_node].begin(), g[new_node].end(), node));
st.push(new_node);
}
else
{
st.pop();
if (!st.empty())
cycle.push_back(st.top());
}
}
for (auto i : cycle)
fout << i << " ";
fout << "\n";
}
int n, x, y, m;
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; ++i)
{
fin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
for (int i = 1; i <= n; ++i)
if (g[i].empty() || g[i].size() & 1)
{
fout << "-1\n";
return 0;
}
euler();
fout.close();
return 0;
}