Pagini recente » Cod sursa (job #1594485) | Cod sursa (job #650971) | Cod sursa (job #2507314) | Cod sursa (job #174247) | Cod sursa (job #1354949)
#include <fstream>
#include <list>
#include <stack>
#include <vector>
#include <algorithm>
#define NMax 100001
using namespace std;
stack<int> s;
vector<int> v[NMax];
vector<int> cycle;
int n, m, x, y;
bool isEuler () {
for (int i = 1; i <= n; i++)
if (v[i].size () & 1)
return 0;
return 1;
}
/*void euler (int now) {
int last;
for (s.push (now); !s.empty ();) {
now = s.top ();
if (!v[now].empty ()) {
int last = v[now].back ();
v[now].pop_back ();
v[last].erase ( find (v[last].begin (), v[last].end (), now) );
s.push (last);
}
else {
s.pop ();
cycle.push_back (now);
}
}
}*/
void euler (int now) {
while (!v[now].empty()) {
int w = *(v[now].begin ()); v[now].erase (v[now].begin ());
v[w].erase ( find (v[w].begin (), v[w].end (), now) );
euler (w);
}
cycle.push_back (now);
}
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
fin >> n >> m;
for (int i = 1; i <= m; i++)
fin >> x >> y,
v[x].push_back (y),
v[y].push_back (x);
if (!isEuler ()) {
fout << -1;
return 0;
}
euler (1);
for (int i = 0; i < cycle.size () - 1; i++)
fout << cycle[i] << ' ';
return 0;
}