时间:2019-03-08 标签:c++next_permutationalgorithm

标签 c++ algorithm

比方说,一个有8个参与者的类(class),我必须以所有可能的方式输出前3个名额。 例如:

123 124 125 126 127 128 213 等等..

我知道有 next_permutation 算法,但它会返回所有数字(从 1 到 8)的所有可能排列,但我需要所有参与者的前 3 个位置 例如:

1  2  3  4  5  6  7  8  
1  2  3  4  5  6  8  7

最佳答案

您所追求的不是排列,这就是为什么单独使用 next_permutation 无法解决您的问题。

首先,您需要确定123 是否与321 相同。如果它们相同,则您有普通的 combinations .如果它们不同,则您有 k-permutations (不同于普通排列)。

std::next_permutation 为您提供下一个排列,而不是下一个 k-排列。没有 std::next_combination

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

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

关于时间:2019-03-08 标签:c++next_permutationalgorithm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9501742/

相关文章:

c++ - 何时链接,何时包含?

c++ - C++ 模板可以用于条件代码包含吗?

c++ - 为字符串文字 C++ 引发编译器错误的宏

Python 连接组件边列表

algorithm - 涉及国际象棋的图算法 : possible paths in k moves

c++ - C/C++ 代码和库混合

c++ - 是否保证始终调用 boost::asio 中的 async_* 处理程序?

python - 如何确定两个句子是否谈论相似的主题?

java - 那个优化算法叫什么?

algorithm - 在给定纬度和经度的情况下找到最近的标记 map 地标/地点