Pagini recente » Cod sursa (job #2553802) | Cod sursa (job #2122001) | Cod sursa (job #2776105) | Cod sursa (job #2519588) | Cod sursa (job #2657016)
#include <iostream>
#include <fstream>
#include <vector>
#define NMAX 100001
#define SZ(x) ((int) (x).size())
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n, m;
vector <int> nodes[NMAX];
vector <int> result;
void read(){
f >> n >> m;
int x, y;
for (int i = 1; i <= m; i++){
f >> x >> y;
nodes[x].push_back(y);
if (x != y)
nodes[y].push_back(x);
else
nodes[y].push_back(-2);
}
}
void euler(int node){
int i = 0;
while (i < nodes[node].size()){
if (nodes[node][i] != -2){
int next = nodes[node][i];
nodes[node].erase(nodes[node].begin() + i);
i--;
if (next != node){
int index = 0;
bool find = false;
while (index < nodes[next].size() && find == false){
if (nodes[next][index] == node){
find = true;
nodes[next].erase(nodes[next].begin() + index);
}
index++;
}
}
i++;
euler(next);
}
else i++;
}
result.push_back(node);
}
int main()
{
read();
for (int i = 1; i <= n; ++i) {
if (SZ(nodes[i]) & 1) {
g << "-1\n";
return 0;
}
}
euler(1);
for (int i = result.size() - 1; i > 0; i--)
g << result[i] << " ";
return 0;
}