Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 循环遍历多集合元素的所有组合_C++_Algorithm_Tree_Multiset - Fatal编程技术网

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
)。