Pagini recente » Cod sursa (job #1285223) | Cod sursa (job #2010206) | Cod sursa (job #3201846) | Cod sursa (job #1452866) | Cod sursa (job #3214979)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct edge_t {
int u, v;
bool rem;
edge_t() {}
edge_t(int u, int v, bool rem): u(u), v(v), rem(rem) {}
int other(int node) {
return node ^ u ^ v;
}
};
vector<edge_t> edges;
vector<vector<int>> adj;
vector<int> cycle;
void euler(int u) {
while(!adj[u].empty()) {
int idx = adj[u].back();
adj[u].pop_back();
int v = edges[idx].other(u);
bool &rem = edges[idx].rem;
if(!rem) {
rem = 1;
euler(v);
}
}
cycle.emplace_back(u);
}
int main() {
int n, m;
fin >> n >> m;
adj = vector<vector<int>>(n);
for(int i = 0; i < m; i++) {
int u, v;
fin >> u >> v;
u--; v--;
int idx = edges.size();
edges.emplace_back(u, v, 0);
adj[u].emplace_back(idx);
adj[v].emplace_back(idx);
}
int u = 0;
while(u < n && !(adj[u].size() & 1)) {
u++;
}
if(u < n) {
fout << "-1\n";
return 0;
}
u = 0;
while(u < n && adj[u].size() == 0) {
u++;
}
euler(u);
cycle.pop_back();
for(const auto &u: cycle) {
fout << u + 1 << " ";
}
return 0;
}