gpt4 book ai didi

c++ - 置换算法 C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:46 26 4
gpt4 key购买 nike

我尝试翻译一种算法,该算法在 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++。

最佳答案

我已经音译了你的函数,我得到了以下内容

#include <iostream>
#include <list>
#include <iterator>

void arrangements( std::list<char> l, std::list<char> f, size_t k )
{
if ( k == 0 )
{
for ( char c : l ) std::cout << c << ' ';
std::cout << std::endl;
}
else
{
for ( auto it = f.begin(); it != f.end(); ++it )
{
std::list<char> g( f.begin(), it );
g.insert( g.end(), std::next( it ), f.end() );

std::list<char> l2( l );
l2.push_back( *it );

arrangements( l2, g , k-1 );
}
}
}

int main()
{
std::list<char> f = { 'A', 'B', 'C', 'D' };

arrangements( std::list<char>(), f, 2 );
}

程序输出为

A B 
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C

不知道是不是你想要的。

如果调用 k 等于 3 的函数,则程序输出将是

A B C 
A B D
A C B
A C D
A D B
A D C
B A C
B A D
B C A
B C D
B D A
B D C
C A B
C A D
C B A
C B D
C D A
C D B
D A B
D A C
D B A
D B C
D C A
D C B

关于c++ - 置换算法 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30698788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com