Pagini recente » Cod sursa (job #1015632) | Cod sursa (job #1571880) | Cod sursa (job #1198614) | Cod sursa (job #173493) | Cod sursa (job #2092387)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
const int MAX_N = 100000;
const int MAX_M = 500000;
struct Edge {
int u;
int v;
bool visited;
int other(int vertex) {
return u + v - vertex;
}
};
int n, m;
Edge edges[1 + MAX_M];
vector<Edge*> neighbours[1 + MAX_N];
stack<int> answer;
void euler(int u) {
for (Edge *e : neighbours[u]) {
if (!e->visited) {
e->visited = true;
euler(e->other(u));
}
}
answer.push(u);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int p, q;
fin >> p >> q;
edges[i] = Edge{p, q, false};
neighbours[p].push_back(&edges[i]);
neighbours[q].push_back(&edges[i]);
}
fin.close();
int u = 1;
while (u <= n && neighbours[u].size() == 0)
u++;
if (u > n)
fout << "-1";
else {
euler(u);
if ((int)answer.size() != m + 1)
fout << "-1";
else
while (answer.size() > 1) {
fout << answer.top() << " ";
answer.pop();
}
}
fout << '\n';
fout.close();
return 0;
}