2012-04-24 65 views
-1

我必須做出二維數組的所有可能的組合。如果我有使用4個循環的4x3 ... IM的陣列,全部跑到3 ..讓所有的組合...可能的組合和循環

for.eg如果我有一個4x3的陣列下面給出..

1 2 3 
4 5 6 
7 8 9 
10 11 12 

我將不得不做出類似的組合

1,4,7,10 
1,4,7,11 
1,4,7,12 
1,4,8,10 
1,4,8,11 
1,4,8,12 
1,4,9,10 
1,4,9,11 
1,4,9,12 

1,5,8,10 
1,5,8,11 
1,5,8,12 
........... 

等等....

總之所有這樣的組合......可能的組合在這種情況下,最大數目將是3次方4 ....如果我有一個nxm數組然後馬最小的組合將是m功率n ....任何一個可以幫助創建它....我想幫助解決它的通用.....我認爲遞歸函數應該使用...因爲我不知道沒有循環...它將在運行時間被知道...

+2

這些被稱爲_permutations_。這應該給你足夠的搜索,但具體看看['std :: next_permutation'](http://en.cppreference.com/w/cpp/algorithm/next_permutation)及其要求。 – ildjarn 2012-04-24 19:27:25

+1

這是功課嗎? – 2012-04-24 19:27:48

+0

我見過你提供的鏈接...但它是一種不同的方法.... – ssaaddii 2012-04-24 19:30:13

回答

0
void buildArray(vector <int> build, vector< vector <int> > &arrays) 
{ 
    int position = build.size(); 
    if (position == arrays.size()) { /* current build is one of the solutions*/} 
    else {   
     for (int i = 0; i < arrays[position].size(); i++) 
     { 
      build.push_back(arrays[position][i]); 
      buildArray(build, arrays); 
      build.pop_back(); 
     } 
    } 
} 
+0

PLZ告訴我,當我將打印在此碼組合(陣列).. 。我的意思是在哪裏? – ssaaddii 2012-04-24 19:34:42

+0

你必須替換第4行的註釋。當build.size()== arrays.size()時,這意味着你已經從每個數組中獲取了一個元素,所以你有一個解決方案 – gabitzish 2012-04-24 19:36:05

+0

構建在那裏做什麼? – ssaaddii 2012-04-24 19:38:03