C++ 排列组合

原创 2016年08月29日 12:50:56
从n个数中取m个的随机组合。
看起来很简单的东西,实现起来真烦。。。。。。搞了一个多小时才想明白。

#include
using namespace std;

void combine(int a[], int n,int m , int b[], int M)
 int i, j;

 for (i = n; i >= m; i--)
  {
   b[m - 1] = i - 1;
   if (m > 1)
    combine(a, i - 1, m - 1, b, M);
   else
    {
     for (j = M - 1; j >= 0; j--)
      printf("%d ", a[b[j]]);
     printf("\n");
    }
  }
}

int main(){
int a[4] = {1,2,3,4};
int b[20];
combine(a,4,2,b,2);
}


核心思想就是比如我们要取3个组合, 从大往小取,先取4  b[m - 1] = i - 1;),然后再在剩下的数组(3,2,1)中取一个,然后再在剩下的数组中去一个。  反正取3次。
每次for (i = n; i >= m; i--) 这个for循环其实只给 b[m - 1] = i - 1; 赋值1次。

 我们还是从大往小取,递归 combine(a, i - 1, m - 1, b, M);
我们可以看出combine(a, i - 1, m - 1, b, M); 下一轮是combine(a,3, 3 - 1, b, 3);
这个递归中其实包含了(3,2,1) 取3个的排列组合。

然后combine(a,3, 2, b, 3);  再下面就是combine(a,2, 1, b, 3);  
递归结束
可以看到一共3层递归。每一层其实都返回了一个b[m - 1] 。。。。循环打印出来。


再看看combine(a,5, 3, b, 3);
反正选几个数排列,递归深度就是几。递归3

相关文章推荐

非递归枚举排列组合(C++)

原文地址:http://www.25kx.com/art/1441000 最近心血来潮,想自己写个求解排列组合的小东西。以2个数组为例: arr1 = {'a', 'b', 'c'}; arr2...

求出排列组合的递归方法(C++)

/* 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。 */ ////递归方法求排列组合数 #include #include #include us...
  • kayzhao
  • kayzhao
  • 2013年11月02日 18:40
  • 948

排列组合 C++实现

最近准备一个考试,发现有考排列组合的内容,所以就研究一下这个问题。首先研究一下排列的问题。     比如求数1 ,2,3,4的排列   Int a[]={1,2,3,4}     第一种方法: vo...

排列组合n选m C++实现

排列组合n选m算法本代码实现http://blog.chinaunix.net/uid-20684578-id-1572099.html所介绍找10组合算法。 算法摘要: 本程序的...

排列组合算法之一: 01转换法_java改变后的c++版

本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。  首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。  然后从左到右扫描数组元素...

排列组合相关笔试面试题(C++)

一、常考点 含有相同元素的全排列:例如2个a,3个b,4个c可以组成多少个不同的字符串?9!/2!/3!/4!。 n个人的全排列:排成一排为n!,排成一圈且考虑旋转带来的差异也为n!,排成一圈但不考虑...

matlab_排列组合

  • 2016年03月17日 21:56
  • 18KB
  • 下载

掌握基本类型,快解排列组合

  • 2015年04月26日 10:42
  • 73KB
  • 下载

bzoj 4013: [HNOI2015]实验比较 树形dp+排列组合

题意链接分析这题光是题目都看了我五分钟。。。先用并查集把等号连接的两个并起来。 题目说明了这给的一定是一篇森林,那么我们只要加个虚根就变成一棵树了。 我们可以把等号看成是边,那么整个序列就被小于号...

排列组合迭代

  • 2014年10月11日 10:46
  • 652KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ 排列组合
举报原因:
原因补充:

(最多只允许输入30个字)