Avatar ·

Zyklen im Stammbaum: Wie erkennt und verhindert man ungültige Verbindungen?

Hallo zusammen! Ich schreibe ein Programm zur Erstellung eines Stammbaums in C++. Ich bin auf das Problem gestoßen, dass ein Benutzer versehentlich einen Zyklus in den Verbindungen erzeugt (z. B. macht er seinen Vorfahren zu seinem Nachkommen). Das zerstört die gesamte Logik der Anzeige und der Verwandtschaftsberechnung. Ich habe eine Struktur für den Baumknoten: ```cpp struct Person { string name; Person* father; Person* mother; vector children; }; ``` Ich füge eine Eltern-Kind-Beziehung über eine Funktion hinzu: ```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; // Problem: Ich überprüfe nicht, ob child ein Vorfahre von parent ist } ``` Wie kann ich eine Zyklusprüfung implementieren? Ich habe es mit einem einfachen rekursiven Vergleich versucht, aber bei einem großen Baum (1000+ Personen) ist das sehr langsam. Gibt es vielleicht einen Standardalgorithmus oder ein Pattern für solche Fälle? Die Prüfung sollte auslösen