修改后的代码是什么样的
时间: 2024-11-20 15:38:54 浏览: 22
为了修正代码中关于后代关系判断的部分,特别是考虑到直系和非直系的情况,我们可以对`is_descendant_of`函数进行一些调整。首先,我们需要确保查询的是家庭树中的有效成员,并在遍历过程中检查是否有不存在的成员。以下是修改后的代码段:
```cpp
bool is_valid_member(const string &name, const map<string, string> &family_tree) {
if (family_tree.find(name) == family_tree.end()) {
cerr << "Invalid member: " << name << endl;
return false;
}
return true;
}
bool is_descendant_of(const map<string, string>& family_tree, const string& descendant, const string& ancestor) {
if (!is_valid_member(descendant, family_tree) || !is_valid_member(ancestor, family_tree)) {
return false;
}
string current = descendant;
while (current != ancestor) {
if (family_tree[current] == "root") {
break;
}
if (family_tree.find(current) == family_tree.end()) {
cerr << "Invalid path from " << descendant << " to " << ancestor << endl;
return false;
}
current = family_tree.at(current);
}
return true;
}
```
现在,我们增加了一个`is_valid_member`函数来检查成员是否存在于家族树中,同时修复了当查询链路无效时可能出现的错误信息。这样,查询结果将更准确地反映出真实的家庭关系。
阅读全文