Pagini recente » Cod sursa (job #481836) | Cod sursa (job #2538170) | Cod sursa (job #958379) | Cod sursa (job #2980673) | Cod sursa (job #2961639)
#include <fstream>
#include <vector>
#include <queue>
#include <stack>
#define N_MAX 100001
#define M_MAX 500001
using namespace std;
int usedEdge[M_MAX], visited[N_MAX], from[N_MAX], to[N_MAX];
vector<int> G[N_MAX];
int main() {
ifstream in("ciclueuler.in");
int n, m;
in >> n >> m;
for(int i = 0; i < m; ++i){
int x, y;
in >> x >> y;
from[i] = x;
to[i] = y;
G[x].push_back(i);
G[y].push_back(i);
}
in.close();
ofstream out("ciclueuler.out");
for (int i = 1; i <= n; ++i) {
if (G[i].size() % 2) {
out << "-1\n";
out.close();
return 0;
}
}
std::stack<int> s;
std::vector<int> cycle;
s.push(1);
while (!s.empty()) {
int node = s.top();
if (!G[node].empty()) {
int e = G[node].back();
G[node].pop_back();
if (!usedEdge[e]) {
usedEdge[e] = true;
int to = ::from[e] ^ ::to[e] ^ node;
s.push(to);
}
} else {
s.pop();
cycle.push_back(node);
}
}
for(int i = 0; i < cycle.size() - 1; ++i){
out << cycle[i] << ' ';
}
out.close();
return 0;
}