Pagini recente » Cod sursa (job #2271000) | Cod sursa (job #1186145) | Cod sursa (job #755024) | Cod sursa (job #389214) | Cod sursa (job #1900956)
#include <stdio.h>
struct pair {
int x, y;
};
struct node {
int v;
node* n;
node() {v = 0; n = NULL;}
};
node* all() { // Alocator de memorie
static int sp = 30;
static node* st = NULL;
if (sp == 30) {
st = new node[30];
sp = 0;
}
return st + (sp++);
}
FILE *o;
node** G;
pair* E;
bool* viz;
int cnt;
void dfs(int u)
{
while (G[u] != NULL) {
printf("A %d %d %p\n", G[u]->v, !viz[G[u]->v], G[u]);
if (!viz[G[u]->v]) {
printf("B\n");
viz[G[u]->v] = 1;
printf("C\n");
dfs(E[G[u]->v].x ^ E[G[u]->v].y ^ u);
}
if (G[u] != NULL) {
G[u] = G[u]->n;
}
}
if (cnt) {
fprintf(o, "%d ", u);
--cnt;
}
}
int main()
{
FILE *fin, *fout;
fin = fopen("ciclueuler.in", "r");
fout = fopen("ciclueuler.out", "w");
o = fout;
// Citesc
int N, M;
fscanf(fin, "%d%d", &N, &M);
cnt = M;
G = new node*[N + 1]();
E = new pair[M];
viz = new bool[M]();
for (int i = 0; i < M; ++i) {
int x, y;
fscanf(fin, "%d%d", &x, &y);
E[i].x = x; E[i].y = y;
node *fwd = all(), *bwd = all();
fwd->v = i; bwd->v = i;
fwd->n = G[x]; bwd->n = G[y];
// Bag in liste
G[x] = fwd; G[y] = bwd;
}
dfs(1);
fclose(fin);
fclose(fout);
return 0;
}