2012-04-24 37 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