我有这个文本文件,我将每一行读入std::vector<std::pair>
,
handgun bullets
bullets ore
bombs ore
turret bullets
第一项取决于第二项。我正在编写一个删除函数,当用户输入项目名称时,它会删除包含该项目作为第二个项目的对。由于存在依赖关系,因此依赖于已删除项目的项目也应该被删除,因为它不再可用。例如,如果我删除ore
, bullets
and bombs
无法再使用,因为ore
不可用。最后,handgun
and turret
也应该删除,因为这些对依赖于bullets
这取决于ore
即间接依赖于ore
。该链应继续下去,直到所有依赖对都被删除。
我尝试对当前示例执行此操作,并提供了以下伪代码,
for vector_iterator_1 = vector.begin to vector.end
{
if user_input == vector_iterator_1->second
{
for vector_iterator_2 = vector.begin to vector.end
{
if vector_iterator_1->first == vector_iterator_2->second
{
delete pair_of_vector_iterator_2
}
}
delete pair_of_vector_iterator_1
}
}
这不是一个很好的算法,但它解释了我打算做什么。在示例中,如果我删除ore
, then bullets
and bombs
也会被删除。随后,配对取决于ore
and bullets
也将被删除(bombs
没有依赖性)。因为,只有一条单长链(ore-->bullets
),只有一个嵌套for
循环检查它。但是,单个链中可能存在零个或大量依赖项,从而导致许多嵌套或没有嵌套for
循环。所以,这不是一个非常实用的解决方案。我该如何使用可变长度的依赖链来做到这一点?请告诉我。感谢您的耐心等待。
P.S.:如果您不明白我的问题,请告诉我。
一种(天真的)解决方案:
- 创建要删除的项目队列
- 添加您的第一个项目(用户输入)
- While(!empty(items-todelete)) 循环遍历你的向量
- 每次您发现当前项目是列表中的第二项时,请将第一项添加到队列中,然后删除该对
轻松优化:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)