Pagini recente » Cod sursa (job #1416642) | Cod sursa (job #2700309) | Cod sursa (job #153788) | Cod sursa (job #431505) | Cod sursa (job #2927578)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5;
const int MMAX = 5e5;
struct edge {
int node, index;
};
vector<edge> multigraph[NMAX + 1];
stack<int> recursionStack;
stack<int> ansCycle;
bool viz[MMAX];
int main() {
int n, m;
FILE *fin, *fout;
fin = fopen("ciclueuler.in", "r");
fout = fopen("ciclueuler.out", "w");
fscanf(fin, "%d%d", &n, &m);
for(int i = 0; i < m; i++) {
int a, b;
fscanf(fin, "%d%d", &a, &b);
multigraph[a].push_back({b, i});
multigraph[b].push_back({a, i});
}
int Node = 1;
while(Node <= n && multigraph[Node].size() % 2 == 0)
Node++;
if(Node == n + 1) {
recursionStack.push(1);
while(!recursionStack.empty()) {
Node = recursionStack.top();
if(!multigraph[Node].empty()) {
edge Edge = multigraph[Node].back();
multigraph[Node].pop_back();
if(!viz[Edge.index]) {
viz[Edge.index] = true;
recursionStack.push(Edge.node);
}
} else {
ansCycle.push(Node);
recursionStack.pop();
}
}
ansCycle.pop();
while(!ansCycle.empty()) {
fprintf(fout, "%d ", ansCycle.top());
ansCycle.pop();
}
} else {
fprintf(fout, "-1");
}
fclose(fin);
fclose(fout);
return 0;
}