C++ 循环遍历多集合元素的所有组合
我需要在树中找到最佳路径,树是C++ 循环遍历多集合元素的所有组合,c++,algorithm,tree,multiset,C++,Algorithm,Tree,Multiset,我需要在树中找到最佳路径,树是多集元素的所有可能组合。 例如,对于这个多集:A-B-C,树将由所有6种可能的组合组成: A-B-C| A-C-B| B-A-C| B-C-A| C-A-B| C-B-A 我只想用multiset循环遍历这棵树 大概是这样的: // I think this must be initialized, but that is not a problem Path bestPath; for (mySet::iterator i(aSet.begin()), e(
多集
元素的所有可能组合。
例如,对于这个多集
:A-B-C,树将由所有6种可能的组合组成:
A-B-C|
A-C-B|
B-A-C|
B-C-A|
C-A-B|
C-B-A
我只想用multiset循环遍历这棵树
大概是这样的:
// 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
可能是相同的,但是循环其余的值,我不想在每个节点中创建一个多集,并将其余的放在它上面,因为节点的数量是多集大小的阶乘,
我找不到一个好方法来做这个 创建一个std::vector,如下所示
std::vector set={A,B,C}
并在向量顶部调用std::next_置换以获得所有置换
std::next_permutation( std::begin(set), std::end(set));
do {
//your code for algorithm
for( auto & x : set)
std::cout<<x<<" ";
std::cout<<"\n";
} while( std::next_permutation( std::begin(set), std::end(set));
std::next_置换(std::begin(set)、std::end(set));
做{
//你的算法代码
用于(自动和x:设置)
std::coutA tree是一种特殊形式的图。图由两个集合定义-一组顶点和一组边。您已经描述了一个集合:“一个multiset
”的元素的所有可能组合。这两个集合中的哪一个是这个集合,另一个集合是如何定义的?同样,当您说“最佳路径”时-哪个顶点和哪个其他顶点之间的路径,以及根据什么标准“最佳”(给定两条路径,如何确定一条路径是否优于另一条)?我编辑了这个问题以显示树的示例,树是这样组成的,首先是根(不代表任何内容),然后是所有的元素,等等,然后对于每个节点,我们把所有的元素都放进去,除了它的父元素,我希望这就是边的意思,“路径”必须是一个允许我检索路径的结构,它包含从实际节点(他的子节点)找到的最佳路径,标准是一个函数,根据我的需要返回布尔值(你不想知道我的标准)我可以在多集上使用它吗?@Othman:std::next\u permutation
修改范围,因此它不能直接用于multiset
(这就是为什么你必须复制到std::vector
)。