Pagini recente » Cod sursa (job #2121744) | Cod sursa (job #2855135) | Cod sursa (job #2352847) | Cod sursa (job #6597) | Cod sursa (job #1487228)
#include <stdio.h>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
#define MAX 100005
int N, M;
stack <int> S;
int deg[MAX];
typedef struct {
vector < vector <int> > Edges;
} Graph;
Graph G;
void read () {
scanf("%d %d", &N, &M);
G.Edges.resize(N+1);
for (int i = 0; i < M; ++i) {
int x, y;
scanf("%d %d", &x, &y);
G.Edges[x].push_back(y);
G.Edges[y].push_back(x);
++deg[x];
++deg[y];
}
}
void euler () {
S.push(1);
do {
int x = S.top(), aux;
if (!G.Edges[x].empty()) {
aux = G.Edges[x].back();
S.push(aux);
G.Edges[x].pop_back();
G.Edges[aux].erase(find(G.Edges[aux].begin(), G.Edges[aux].end(), x));
} else {
printf("%d ", x);
S.pop();
}
} while (!S.empty());
}
int main (void) {
freopen("ciclueuler.in", "r", stdin);
freopen("ciclueuler.out", "w", stdout);
read();
for (int i = 1; i <= N; ++i) {
if (deg[i] % 2) {
printf("-1");
return 0;
}
}
euler();
return 0;
}