Pagini recente » Cod sursa (job #2367679) | Cod sursa (job #1368161) | Cod sursa (job #1654121) | Cod sursa (job #2860506) | Cod sursa (job #941916)
Cod sursa(job #941916)
#include <iostream>
#include <fstream>
#include <list>
#include <stack>
using namespace std;
struct edge
{
int ve;
list<edge>::iterator it;
};
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n, m;
fin >> n >> m;
list<edge> adjl[n+1];
int u, v;
list<edge>::iterator it1, it2;
for (int i = 0; i < m; ++i) {
fin >> u >> v;
adjl[u].push_back(edge());
it1 = --adjl[u].end();
adjl[v].push_back(edge());
it2 = --adjl[v].end();
it1->ve = v, it1->it = it2;
it2->ve = u; it2->it = it1;
}
int circuit[m+1], pos = 0;
stack<int> s;
s.push(1);
while (!s.empty()) {
u = s.top();
if (adjl[u].empty()) {
s.pop();
circuit[pos++] = u;
}
else {
v = adjl[u].front().ve;
adjl[v].erase(adjl[u].front().it);
adjl[u].pop_front();
s.push(v);
}
}
if (pos == m+1 && circuit[0] == circuit[m])
for (int i = 0; i < m; ++i)
fout << circuit[i] << '\n';
else
fout << -1;
return 0;
}