Pagini recente » Cod sursa (job #2970674) | Cod sursa (job #3264599) | Cod sursa (job #608157) | Cod sursa (job #2618220) | Cod sursa (job #2932708)
#include <fstream>
#include <vector>
#include <deque>
using namespace std;
#define N 100001
struct bla {
int neigh, edge;
};
vector<bla> graph[N];
bool viz[500001];
deque<int> deq;
void euler(int node) {
while(!graph[node].empty()) { //e mai optim sa elimin muchiile prin care am trecut, sa nu mai tot verific daca am trecut sau nu
int value = graph[node].back().neigh;
int edge = graph[node].back().edge;
graph[node].pop_back();
if (!viz[edge]) {
viz[edge] = 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, i});
graph[b].push_back({a,i});
}
for (int i = 1; i <= nodes; ++i) {
if (graph[i].size() % 2 != 0) {
g << -1;
}
}
euler(1);
deq.pop_back();
while (!deq.empty()) {
g << deq.back() << " ";
deq.pop_back();
}
f.close();
g.close();
return 0;
}