结合算法-递归实现
组合算法-递归实现假设在n个数中选取m(0mn)个数为例,可以假这个问题划分为下面两个问题:从n个数中选取
组合算法-递归实现
假设在n个数中选取m(0<m<=n)个数为例,可以假这个问题划分为下面两个问题:
从n个数中选取编号最大的数,然后在剩下的n-1个数里面选取m-1个数,直到从n-(m-1)个数中选取1个数。从n个数中选取编号更小的一个数,继续执行第一步,直到当前可选编号最大的值为m。
下面是递归方法的实现:
/// 求从数组a[1..n]中任选m个元素的所有组合。
/// a[1..n]表示候选集,m表示一个组合的元素个数。
/// b[1..M]用来存储当前组合中的元素, 常量M表示一个组合中元素的个数。
void combine( int a[], int n, int m, int b[],int M ){int i = 0;for(i=n; i>=m; i--){b[m-1] = i - 1;if (m > 1){combine(a,i-1,m-1,b,M);}else{int j=0;for(j=M-1; j>=0; j--)printf("%d,",a[j]);printf("\n");}}}