Pagini recente » Cod sursa (job #1692028) | Cod sursa (job #2433372) | Cod sursa (job #2334871) | Cod sursa (job #1497836) | Cod sursa (job #1995936)
#include <cstdio>
const int MAX_N = 100000;
const int MAX_M = 500000;
int top = 0;
int a[MAX_M], b[MAX_M];
bool viz[MAX_M];
int mc[1+2*MAX_M], next[1+2*MAX_M], last[1+MAX_N], idmc[1+2*MAX_M];
int euler[1+2*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) {
printf("%d\n", nod);
while(last[nod] != 0) {
int i = last[nod], id = idmc[last[nod]];
if(viz[id] == true)
last[nod] = next[last[nod]];
else {
last[nod] = next[last[nod]];
viz[id] = true;
dfs(mc[i]);
}
}
euler[top++] = nod;
}
int main() {
int n, m, a, b;
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);
addM(a, b, i * 2 + 1, i);
addM(b, a, i * 2 + 2, i);
}
fclose(fin);
dfs(1);
FILE *fout = fopen("ciclueuler.out", "w");
for(int i = 0; i < top - 1; ++i)
fprintf(fout, "%d ", euler[i]);
fclose(fout);
return 0;
}