Avatar ·

如何在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 的父母(循环!) 当尝试递归遍历以查找祖先时,程序会陷入无限循环。