【发布时间】:2015-04-14 14:22:40
【问题描述】:
我需要在一棵树中找到最佳路径,这棵树是multiset 元素的所有可能组合。
例如对于这个multiset:A - B - C,树将由所有 6 种可能的组合组成:
A - B - C |
A - C - B |
B - A - C |
B - C - A |
C - A - B |
C - B - A
我想仅使用多重集循环遍历这棵树,
类似这样的:
// I think this must be initialized, but that is not a problem
Path bestPath;
for (mySet::iterator i(aSet.begin()), e(
aSet.end()); i != e; ++i) {
Path path = someRecursiveFunction(*i);
if(criteria(bestPath,path))
bestPath = path;
return bestPath;
}
和someRecursiveFunction 可能是相同的,但是在其余的值上循环,我不想在每个节点中创建一个多重集并将其余的放在上面,因为节点的数量是因子的大小多组,
我找不到这样做的好方法......
【问题讨论】:
-
树是特定形式的图。一个图由两组定义——一组顶点和一组边。您已经描述了一组:“
multiset元素的所有可能组合”。这两个集合中的哪一个,另一个集合是如何定义的? -
另外,当您说“最佳路径”时 - 哪个顶点和哪个其他顶点之间的路径,以及根据什么标准“最佳”(给定两条路径,您如何确定一个路径是否优于其他)?
-
我编辑了问题以显示树的示例,树的组成如下,首先是根(不代表任何内容),然后是所有元素,然后对于每个节点,我们将所有元素,但他的父母,我希望这就是边缘的意思
-
'path' 必须是一个允许我检索路径的结构,它包含从实际节点(他的孩子)中找到的最佳路径,并且标准是一个返回布尔值的函数,具体取决于我需要什么(你不想知道我的标准)
标签: c++ algorithm tree multiset