Avatar ·

Cómo detectar y prevenir ciclos en un árbol genealógico en C++

¡Hola a todos! Estoy escribiendo un programa para construir un árbol genealógico en C++. Me encontré con un problema grave: al agregar relaciones familiares, el usuario puede crear accidentalmente un ciclo. Por ejemplo, indicar que el abuelo es nieto de su propio nieto. El programa se cuelga o falla con segmentation fault al intentar recorrer el árbol. Mi estructura de datos se ve así: ```cpp struct Person { string name; vector parents; vector children; }; ``` Agrego una relación "padre-hijo" más o menos así: ```cpp void addParentChild(Person* parent, Person* child) { parent->children.push_back(child); child->parents.push_back(parent); } ``` El usuario ingresa los datos en orden arbitrario, y no puedo garantizar que no surja un ciclo. Por ejemplo, después de varias operaciones podría obtenerse: - A — padre de B - B — padre de C - C — padre de A (¡ciclo!) Al intentar un recorrido recursivo para buscar antepasados, el programa entra en un bucle infinito.