Pagini recente » Cod sursa (job #2101197) | Cod sursa (job #197193) | Cod sursa (job #2260911) | Cod sursa (job #2270241) | Cod sursa (job #2927933)
#include <bits/stdc++.h>
using namespace std;
#define NO_NODES 100000
int noNodes, noEdges;
list<int> graph[NO_NODES];
vector<int> cycle;
void addEdge(int x, int y) {
graph[x].push_back(y);
graph[y].push_back(x);
}
bool checkDegrees() {
int node;
node = 0;
while (node < noNodes && graph[node].size() % 2 == 0)
++node;
return node == noNodes;
}
void euler(int node) {
int neighbour;
while (graph[node].size()) {
neighbour = graph[node].back();
graph[node].pop_back();
graph[neighbour].erase(find(graph[neighbour].begin(), graph[neighbour].end(), node));
--noEdges;
euler(neighbour);
}
cycle.push_back(node);
}
int main() {
FILE* fin = fopen("ciclueuler.in", "r");
FILE* fout = fopen("ciclueuler.out", "w");
int x, y, i;
fscanf(fin, "%d%d", &noNodes, &noEdges);
for (i = 0; i < noEdges; ++i) {
fscanf(fin, "%d%d", &x, &y);
addEdge(x - 1, y - 1);
}
if (checkDegrees()) {
euler(0);
if (noEdges == 0) {
cycle.pop_back();
for (int node : cycle)
fprintf(fout, "%d ", node + 1);
} else
fprintf(fout, "-1\n");
} else
fprintf(fout, "-1\n");
fclose(fin);
fclose(fout);
return 0;
}