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.
No answers yet.
Connectez-vous pour laisser une réponse