Avatar ·

Comment détecter et prévenir les cycles dans un arbre généalogique en C++ ?

Bonjour à tous ! J'écris un programme pour construire un arbre généalogique en C++. Je suis confronté à un sérieux problème : lors de l'ajout de liens de parenté, l'utilisateur peut accidentellement créer un cycle. Par exemple, indiquer que le grand-père est le petit-fils de son propre petit-fils. Le programme se bloque ou plante avec une segmentation fault lors de la tentative de parcours de l'arbre. Ma structure de données ressemble à ceci : ```cpp struct Person { string name; vector parents; vector children; }; ``` J'ajoute un lien "parent-enfant" approximativement comme ceci : ```cpp void addParentChild(Person* parent, Person* child) { parent->children.push_back(child); child->parents.push_back(parent); } ``` L'utilisateur saisit les données dans un ordre arbitraire, et je ne peux pas garantir qu'un cycle ne se produira pas. Par exemple, après plusieurs opérations, on pourrait obtenir : - A — parent de B - B — parent de C - C — parent de A (cycle !) Lors de la tentative de parcours récursif pour rechercher les ancêtres, le programme entre dans une boucle infinie.