Avatar ·

Como detectar e prevenir ciclos em uma árvore genealógica em C++?

Olá a todos! Estou escrevendo um programa para construir uma árvore genealógica em C++. Enfrentei um problema sério: ao adicionar relações de parentesco, o usuário pode acidentalmente criar um ciclo. Por exemplo, indicar que o avô é neto do seu próprio neto. O programa trava ou cai com segmentation fault ao tentar percorrer a árvore. Minha estrutura de dados é assim: ```cpp struct Person { string name; vector parents; vector children; }; ``` Eu adiciono a relação "pai-filho" mais ou menos assim: ```cpp void addParentChild(Person* parent, Person* child) { parent->children.push_back(child); child->parents.push_back(parent); } ``` O usuário insere os dados em ordem arbitrária, e não posso garantir que não surja um ciclo. Por exemplo, após várias operações, pode acontecer: - A — pai de B - B — pai de C - C — pai de A (ciclo!) Ao tentar um percurso recursivo para buscar ancestrais, o programa entra em um loop infinito.