如何在C++中检测并防止家谱中的循环?
大家好!我正在用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 的父母(循环!)
当尝试递归遍历以查找祖先时,程序会陷入无限循环。