我尝试翻译一个在C++中生成n个元素中k个排列的算法:
public void calculerEquipeTOT(ArrayList<Nageur> L, ArrayList<Nageur> F, int k) {
if (k == 0) {
if (calculerPointsTOT(L) > this.pointsMeilleureEquipe){
this.meilleureEquipe = L;
this.pointsMeilleureEquipe = calculerPointsTOT(meilleureEquipe);
}
} else {
for (Nageur x : F) {
ArrayList<Nageur> G = new ArrayList<Nageur>(F);
G.remove(G.indexOf(x));
ArrayList<Nageur> L2 = new ArrayList<Nageur>(L);
L2.add(x);
calculerEquipeTOT(L2, G, k - 1);
}
}
}
我的问题是列表可以是对象列表,我不知道如何删除L2列表的x...我不是C++专家,我在Java中实现了它,但我必须在C++中完成。
std::next_permutation
有什么问题吗? - πάντα ῥεῖstd::next_permutation
可以帮助你计算一个范围内的所有排列组合:std::vector<People> ps = ...; do { doSomething(ps); } while ( std::next_permutation(ps.begin(), ps.end()) );
。请参考 http://en.cppreference.com/w/cpp/algorithm/next_permutation 获取示例和详细参考。 - stefan