首页 >后端开发 >C++ >如何在 C 语言中高效地生成组合?

如何在 C 语言中高效地生成组合?

DDD
DDD原创
2024-12-02 00:11:11532浏览

How Can I Efficiently Generate Combinations in C  ?

在 C 中高效生成组合

在 C 中确定组合可能是一项具有挑战性的任务,特别是当您正在寻找处理不同输入值的灵活解决方案时。

解决此问题的一个深思熟虑的方法是使用标准 C 库中的 next_permutation 函数。该函数增量地生成向量的所有排列。以下是如何利用此函数:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    int n, r;
    std::cin >> n;
    std::cin >> r;

    std::vector<bool> v(n);
    std::fill(v.end() - r, v.end(), true);

    do {
        for (int i = 0; i < n; ++i) {
            if (v[i]) {
                std::cout << (i + 1) << " ";
            }
        }
        std::cout << "\n";
    } while (std::next_permutation(v.begin(), v.end()));
    return 0;
}

此方法有效地创建一个带有 r 选择器值的选择数组 (v)。随后,它会迭代此选择数组的所有排列,打印所选位置的相应集合成员。

例如,如果您提供输入“5 2”(S = {1, 2, 3, 4 , 5} 且 r = 2),该算法将输出:

1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

该方法为在 C 中生成组合提供了一种高效且通用的解决方案.

以上是如何在 C 语言中高效地生成组合?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn