Pagini recente » Cod sursa (job #2733799) | Cod sursa (job #1717855) | Cod sursa (job #2573200) | Borderou de evaluare (job #1778312) | Cod sursa (job #1378720)
#include <fstream>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;
const int kNMax = 100010;
int n, grad[kNMax], ok;
stack <int> Stack;
vector <int> G[kNMax], sol;
void Citire() {
ifstream in("ciclueuler.in");
int m, x, y;
in >> n >> m;
for (int i = 1; i <= m; ++i) {
in >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
grad[x]++;
grad[y]++;
}
in.close();
}
void StergereMuchii(int nod, int vecin) {
G[nod][0] = G[nod][G[nod].size() - 1];
G[nod].pop_back();
G[vecin].erase(find(G[vecin].begin(), G[vecin].end(), nod));
}
int ValidareCiclu() {
for (int i = 1; i <= n; ++i)
if(grad[i] % 2 == 1)
return 0;
return 1;
}
void Solve() {
ok = ValidareCiclu();
if (ok) {
Stack.push(1);
while (!Stack.empty()) {
int nod = Stack.top();
if (G[nod].size()) {
int vecin = G[nod].front();
Stack.push(vecin);
StergereMuchii(nod, vecin);
} else {
sol.push_back(Stack.top());
Stack.pop();
}
}
}
}
void Afisare() {
ofstream out ("ciclueuler.out");
if (ok == 0)
out << -1 ;
else
for (int i = 1; i < sol.size(); ++i)
out << sol[i] << ' ';
out << '\n';
out.close();
}
int main() {
Citire();
Solve();
Afisare();
return 0;
}