Avatar ·

Как обнаружить и предотвратить циклы в генеалогическом дереве на C++?

```html ترجمة HTML مرحباً بالجميع! أقوم بكتابة برنامج لبناء شجرة عائلة بلغة C++. واجهت مشكلة خطيرة: عند إضافة علاقات عائلية، يمكن للمستخدم إنشاء حلقة عن طريق الخطأ. على سبيل المثال، تحديد أن الجد هو حفيد حفيده الخاص. البرنامج يتعطل أو يتوقف مع segmentation fault عند محاولة اجتياز الشجرة. تبدو بنية البيانات الخاصة بي كما يلي: ```cpp struct Person { string name; vector parents; vector children; }; ``` أقوم بإضافة علاقة "والد-طفل" تقريباً كما يلي: ```cpp void addParentChild(Person* parent, Person* child) { parent->children.push_back(child); child->parents.push_back(parent); } ``` يدخل المستخدم البيانات بترتيب عشوائي، ولا يمكنني ضمان عدم حدوث حلقة. على سبيل المثال، بعد عدة عمليات قد نحصل على: - A — والد B - B — والد C - C — والد A (حلقة!) عند محاولة الاجتياز التكراري للبحث عن الأجداد، يدخل البرنامج في حلقة لا نهائية. ```