#include #define MAXV 100 /* Maximální počet vrcholů */ /* Popis jednoho vrcholu */ struct vertex { int deg; /* Počet hran z vrcholu */ int e[MAXV]; /* Jednotlivé hrany */ int cross[MAXV]; /* Odkazy na */ }; struct vertex v[MAXV]; /* Informace o vrcholech */ int n; /* Počet vrcholů */ /* Načte graf */ void read_inp(void) { int i, a, b; printf("Pocet poli: "); scanf("%d", &n); /* Načte hrany */ for (i = 0; i < n-1; i++) { scanf("%d %d", &a, &b); a--; b--; v[a].e[v[a].deg++] = b; v[b].e[v[b].deg++] = a; } } /* Nalezne kružnici začnínající v A; P je číslo rodiče; D je hloubka */ void find_circle(int a, int p, int d) { int i; if (!(d&1)) /* Sudá hloubka */ printf("%d ", a+1); for (i = 0; i < v[a].deg; i++) if (v[a].e[i] != p) /* Nevracíme se? */ find_circle(v[a].e[i], a, d+1); /* Vyřešíme podstrom */ if (d&1) /* Lichá hloubka */ printf("%d ", a+1); } int main(void) { read_inp(); /* Načteme strom */ puts("Navod:"); find_circle(0, -1, 0); /* Nalezne a vypíše kružnici */ puts(""); return 0; }