वंश वृक्ष में चक्र: अमान्य संबंधों का पता कैसे लगाएं और रोकें?
सभी को नमस्कार! मैं C++ में वंश वृक्ष बनाने का प्रोग्राम लिख रहा हूँ। मुझे एक समस्या का सामना करना पड़ा जब उपयोगकर्ता गलती से संबंधों में एक चक्र बना देता है (उदाहरण के लिए, अपने पूर्वज को अपना वंशज बना देता है)। यह प्रदर्शन और रिश्तेदारी गणना के पूरे तर्क को तोड़ देता है।
मेरे पास ट्री नोड के लिए एक struct है:
```cpp
struct Person {
string name;
Person* father;
Person* mother;
vector children;
};
```
मैं एक function के माध्यम से "माता-पिता-बच्चा" संबंध जोड़ता हूँ:
```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;
// समस्या: मैं यह जाँच नहीं कर रहा हूँ कि child, parent का पूर्वज नहीं है
}
```
चक्रों की जाँच कैसे करें? मैंने सरल रिकर्सिव तुलना करने की कोशिश की, लेकिन बड़े ट्री (1000+ लोग) के साथ यह बहुत धीमा है। क्या ऐसे मामलों के लिए कोई मानक algorithm या pattern है? मुझे चाहिए कि जाँच काम करे