2017-09-04 17 views
-1

は、3つの配列有する場合考えてみましょう:これらの3つの配列(C++やPython)からのすべての可能な組み合わせを生成する方法配列から組み合わせを生成するには?

X = {A , B , C}; 
Y = {D , E , F}; 
Z = {G , H , I}; 

を、それが

C1 = {A , D , G}; 
C2 = {A , D , H}; 
... 
C4 = {A, E , G}; 
... 
C10 = {B , D , G}; 
... 
... 
+0

私はあなたがデカルト積を探していると思う:ちょうど私はそれが6のサイズは、以下の機能を使用するには、サンザシの例であり見なさ「編曲」と呼ばれるアレイ内のすべてのあなたの要素を置きます。ここを見てください.https://stackoverflow.com/questions/533905/get-the-cartesian-product-of-a-series-of-lists – Tico

+0

@Ticoありがとうこれはまさに私が探していたものです..もしあればC++の実装も素晴らしいでしょう。 –

+0

@Julienありがとうこれはまさに私が探していたものです。もしC++の実装があればそれも素晴らしいでしょう。 –

答えて

2

ようなものだと、この

from itertools import product 

x = {'a', 'b', 'c'} 
y = {'d', 'e', 'f'} 
z = {'g', 'h', 'i'} 

for a in product(x, y, z): 
    print(a) 
をお試しください

もしあなたがもっと地球になりたいなら、ネストされたループによって複数のセットからすべての組み合わせを得ることができます。あなたが事前に存在するどのように多くの反復可能オブジェクトわからない場合はPythonで、それはプログラムの実行時に、あなたは、たとえば、product(*args)を実行し、リストにそれらを追加しておくことができ、この

for e1 in x: 
    for e2 in y: 
     for e3 in z: 
      print((e1, e2, e3)) 

ようになる

items = [x, y] 
items.append(z) 
for a in product(*items): 
    print(a) 
+0

実行時まで入力配列がわからない場合はどうしたらいいですか? –

+0

私は、どのくらいの配列を使って作業するのか分かりません –

0

STLの内部にアルゴリズムヘッダを使用することができます。next_permutation関数を使用すると、可能なすべての組み合わせを生成できます。注意:1つの順列しか生成されません。ループ内で使用する必要があります。このリンクの機能のドキュメントを見ることができます。 Generating Permutation

0

「組み合わせ」機能は、回答を見つけるために再帰的に機能します。

#include <iostream> 
#include <vector> 
using namespace std; 


void combinations(string arr[], int len, int startPosition, string result[]){ 
    if (len == 0){ 
     cout <<"{"; 
     for (int i = 0; i < 2; i++) { 
      cout << result[i] <<", "; 
     } 
     cout << result[2]+ "}" << endl; 
     return; 
    } 

    for (int i = startPosition; i <= 6-len; i++){ 
     result[3 - len] = arr[i]; 
     combinations(arr, len-1, i+1, result); 
    } 
} 

int main(int argc, const char * argv[]) { 

    string arr[] = {"A","B","C","D","E","F"}; 
    string temp[3]; 
    combinations(arr, 3, 0, temp); 

} 
関連する問題