我需要在树中找到最佳路径,树是multiset
元素的所有可能组合。
例如,对于此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(
aSet.end()); i != e; ++i) {
Path path = someRecursiveFunction(*i);
if(criteria(bestPath,path))
bestPath = path;
return bestPath;
}
和someRecursiveFunction
必须是相同的,但循环其余的值,我不想在每个节点中创建一个多集,并将其余部分放在其上,因为节点的数量是因素的大小多重集,
我无法找到一个好方法来做到这一点......
答案 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));