ホームページ >バックエンド開発 >C++ >C で順列を使用して組み合わせを生成するにはどうすればよいですか?

C で順列を使用して組み合わせを生成するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-30 19:04:13482ブラウズ

How Can I Generate Combinations in C   Using Permutations?

単純な置換を使用した C での組み合わせの生成

C では、置換を伴う単純なアプローチを使用して組み合わせを生成できます。この方法では、要素の順序が重要となる置換生成の概念を理解する必要があります。

アルゴリズムの概要:

  1. サイズ v のブール ベクトルを作成します。 n、n はセット内の要素の総数です。
  2. v の最初の r 要素について、それらを設定します。真実に。このステップでは、セットから最初の r 要素を選択します。
  3. next_permutation または prev_permutation 関数を使用して、ブール ベクトルのすべての順列を生成します。
  4. 各順列について、対応する要素のインデックスを出力します。の真の値v.

実装:

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;
}

説明:

next_permutation 関数は、次のブールベクトルの辞書順列。ベクトルを反復処理し、真の値のインデックスを出力することにより、セット内の最初の r 要素の組み合わせを取得します。

以上がC で順列を使用して組み合わせを生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。