Pagini recente » Cod sursa (job #1970603) | Cod sursa (job #2909017) | Cod sursa (job #1988954) | Cod sursa (job #455180) | Cod sursa (job #2932702)
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
#define N 100001
vector<int> graph[N];
bool viz[N];
deque<int> deq;
void euler(int node) {
viz[node] = 0; //dar dupa ce l-am scos pot sa il bag iar.
while(!graph[node].empty()) { //trebuie sa elimin muchiile prin care am trecut sa nu fac ciclu infinit
int value = graph[node].back();
graph[node].pop_back();
if (!viz[value]) { //ma asigur sa nu bag acelasi nod de mai multe ori in coada
viz[value] = 1;
euler(value);
}
}
deq.push_back(node);
}
int main() {
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int nodes, arcs, a, b;
f >> nodes >> arcs;
for (int i = 1; i <= arcs; ++i) {
f >> a >> b;
graph[a].push_back(b);
}
for (int i = 1; i <= nodes; ++i) {
if (graph[i].size() % 2 != 0) {
g << -1;
}
}
euler(1);
while (!deq.empty()) {
g << deq.back() << " ";
deq.pop_back();
}
f.close();
g.close();
return 0;
}