c ++ next_permutation算法

dda*_*cot 3 c++ algorithm

让我们说,一个有8个参与者的课程,我必须以所有可能的方式输出前3个位置.例如:

123 124 125 126 127 128 213等等..

我知道有next_permutation算法,但它返回所有可能的permations与所有数字(从1到8),但我需要前三个地方与所有参与者ex:

1  2  3  4  5  6  7  8  
1  2  3  4  5  6  8  7
Run Code Online (Sandbox Code Playgroud)

n. *_* m. 5

你所追求的东西不是排列,这就是为什么next_permutation单独不能解决你的问题.

首先,您需要决定是否123相同321.如果它们相同,则可以使用简单的组合.如果它们不同,则具有k-排列(与普通排列不同).

std::next_permutation给你下一个排列,而不是下一个k排列.没有std::next_combination.

幸运的是,如果您自己编写next_combination(或在互联网上找到一个),您可以std::next_permutation一起使用它来轻松表达next_k_permutation算法.

有了正确的术语,应该很容易找到解决方案.