Pagini recente » Cod sursa (job #601531) | Cod sursa (job #2241345) | Profil Adriana_S | Cod sursa (job #38375) | Cod sursa (job #2124337)
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int N, M;
vector <vector <int> > g;
vector <pair <int, int> > edges;
vector <bool> usedEdge;
vector <int> ciclu;
void readGraph() {
fin >> N >> M;
g.resize(N + 1);
edges.resize(M + 1);
usedEdge.resize(M + 1, false);
int x, y;
for (int i = 1; i <= M; ++i) {
fin >> x >> y;
edges[i] = {x, y};
g[x].push_back(i);
g[y].push_back(i);
}
}
bool checkEuler() {
for (auto x: g) {
if (x.size() % 2 == 1)
return 0;
}
return 1;
}
void generateCycle(int node) {
int p;
for (const int& edge: g[node]) {
if (!usedEdge[edge]) {
p = edges[edge].first;
usedEdge[edge] = 1;
if (p == node)
p = edges[edge].second;
generateCycle(p);
}
}
ciclu.push_back(node);
}
int main()
{
readGraph();
if (checkEuler()) {
generateCycle(1);
ciclu.pop_back();
for (auto& t: ciclu)
fout << t << ' ';
}
else
fout << -1;
fin.close();
fout.close();
return 0;
}