Pagini recente » Cod sursa (job #1703065) | Cod sursa (job #995026) | Cod sursa (job #2899275) | Cod sursa (job #955150) | Cod sursa (job #2856997)
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
ifstream in("in.in");
ofstream out("out.out");
#else
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
#endif
vector<int> sol,viz;
int n,m;
vector<vector<pair<int,int>>> g;
void eulerCycle(int node) {
for (int i = 0; i < g[node].size(); i++) {
auto k = g[node][i];
if (viz[k.second] == 0) {
viz[k.second] = 1;
eulerCycle(k.first);
} else {
swap(g[node][i] , g[node][(int)g[node].size() - 1]);
g[node].pop_back();
i--;// the node at this point is still interesting
}
}
sol.push_back(node);
}
int main() {
in >> n >> m;
g.resize(n + 1);
viz.resize(m + 1);
for (int i =1 ; i <= m; i++) {
int u,v;
in >> u >> v;
g[u].push_back({v,i});
g[v].push_back({u,i});
}
for (int i = 1; i <= n; i++) {
if (g[i].size() % 2 == 1) {
out << "-1\n";
return 0;
}
}
eulerCycle(1);
sol.pop_back();
for (auto k : sol) {
out << k << " ";
}
out << "\n";
}