Pagini recente » Cod sursa (job #1435491) | Cod sursa (job #1123576) | Cod sursa (job #2967738) | Cod sursa (job #2428975) | Cod sursa (job #1995941)
#include <cstdio>
const int MAX_N = 100000;
const int MAX_M = 500000;
int top = 0;
bool viz[MAX_M];
int mc[1+2*MAX_M], next[1+2*MAX_M], last[1+MAX_N], idmc[1+2*MAX_M], grad[1+MAX_N];
int euler[1+MAX_M];
void addM(int a, int b, int id, int i) {
next[id] = last[a];
last[a] = id;
mc[id] = b;
idmc[id] = i;
}
void dfs(int nod) {
while(last[nod] != 0) {
if(viz[idmc[last[nod]]] == true)
last[nod] = next[last[nod]];
else {
viz[idmc[last[nod]]] = true;
dfs(mc[last[nod]]);
}
}
euler[top++] = nod;
}
int main() {
int n, m, a, b;
bool ok = true;
FILE *fin = fopen("ciclueuler.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(int i = 0; i < m; ++i) {
fscanf(fin, "%d%d", &a, &b);
grad[a]++;
grad[b]++;
addM(a, b, i * 2 + 1, i);
addM(b, a, i * 2 + 2, i);
}
fclose(fin);
for(int i = 0; i < n; ++i)
if(grad[i] % 2 == 1)
ok = false;
FILE *fout = fopen("ciclueuler.out", "w");
if(ok) {
dfs(1);
for(int i = 0; i < top - 1; ++i)
fprintf(fout, "%d ", euler[i]);
} else
fprintf(fout, "-1");
fclose(fout);
return 0;
}