循环遍历多集元素的所有组合

时间:2015-04-14 14:22:40

标签: c++ algorithm tree multiset

我需要在树中找到最佳路径,树是multiset元素的所有可能组合。 例如,对于此multiset:A - B - C,树将由所有6种可能的组合组成: A - B - C | A - C - B | B - A - C | B - C - A | C - A - B | C - B - A

enter image description here

我想仅使用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必须是相同的,但循环其余的值,我不想在每个节点中创建一个多集,并将其余部分放在其上,因为节点的数量是因素的大小多重集, 我无法找到一个好方法来做到这一点......

1 个答案:

答案 0 :(得分:3)

按如下方式创建std :: vector  std::vector<char> set ={A,B,C}并在向量之上调用std :: next_permutation以获取所有排列

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