Avatar ·

Cycles dans l'arbre généalogique : comment détecter et prévenir les liens incorrects ?

Bonjour à tous ! J'écris un programme pour construire un arbre généalogique en C++. J'ai rencontré un problème lorsque l'utilisateur crée accidentellement un cycle dans les liens (par exemple, fait de son ancêtre son descendant). Cela casse toute la logique d'affichage et de calcul de parenté. J'ai une structure pour le nœud de l'arbre : ```cpp struct Person { string name; Person* father; Person* mother; vector children; }; ``` J'ajoute un lien parent-enfant via une fonction : ```cpp void addChild(Person* parent, Person* child) { parent->children.push_back(child); if (child->father == nullptr) child->father = parent; else if (child->mother == nullptr) child->mother = parent; // Problème : je ne vérifie pas que child n'est pas un ancêtre de parent } ``` Comment faire une vérification des cycles ? J'ai essayé une simple comparaison récursive, mais avec un grand arbre (1000+ personnes), c'est très lent. Existe-t-il un algorithme standard ou un pattern pour ces cas ? Il faut que la vérification fonctionne