Pagini recente » Cod sursa (job #1989916) | Cod sursa (job #1250620) | Cod sursa (job #1187107) | Rating Beznea Mircea-Andrei (mirceabezneaandrei) | Cod sursa (job #1133007)
#include <iostream>
#include <vector>
#include <list>
#include <fstream>
using namespace std;
struct Edge {
int dest;
list<Edge>::iterator back;
};
int n, m;
vector<list<Edge> > G;
list<int> ret;
void lisaa(list<int>::iterator after) {
int v = *after;
list<int>::iterator before = after;
++before;
int x = v;
do {
int next = G[x].front().dest;
G[next].erase(G[x].front().back);
G[x].erase(G[x].begin());
x = next;
ret.insert(before, x);
} while(x != v);
}
int main() {
ifstream in("ciclueuler.in");
in >> n >> m;
G.resize(n);
for(int i = 0; i < m; ++i) {
int a, b;
in >> a >> b;
--a;
--b;
list<Edge>::iterator e1 = G[a].insert(G[a].end(), Edge());
list<Edge>::iterator e2 = G[b].insert(G[b].end(), Edge());
e1->dest = b;
e1->back = e2;
e2->dest = a;
e2->back = e1;
}
for(int i = 0; i < n; ++i) {
if(G[i].size() == 0 || G[i].size() % 2 == 1) {
ofstream out("ciclueuler.out");
out << "-1\n";
return 0;
}
}
ret.push_back(0);
list<int>::iterator pos = ret.begin();
while(pos != ret.end()) {
while(!G[*pos].empty()) {
lisaa(pos);
}
++pos;
}
ret.pop_back();
ofstream out("ciclueuler.out");
for(list<int>::iterator it = ret.begin(); it != ret.end(); ++it) {
if(it != ret.begin()) {
out << " ";
}
out << *it + 1;
}
out << "\n";
return 0;
}