求集合的组合和排列问题
2013-07-05 13:13
309 查看
排列组合为数学中常见问题,但是正要用算法表示出来相信还是有一定困难的.这里将用递归算法实现排列和组合问题
1)组合问题
算法实现如下:
其中printSet函数打印出集合a中前m个元素,这里实际上是打印出满足条件的一个子集
从分析中可以看出这是典型的递归思路,排列算法如下:
下面是求集合src={1,2,3}的排列组合的完整代码
运行结果如下:
1)组合问题
算法实现如下:
//求组合 //i表示当前处理是那个元素,src表示要求组合的原集合,n表示原集合中元素的个数 //a用于存储元集合的一个组合,m表示a重元素的个数 void Combination(int i,int * src,int n,int * a,int m) { if(i>=n) printSet(a,m); else { a[m]=src[i]; Combination(i+1,src,n,a,m+1); Combination(i+1,src,n,a,m); } }
其中printSet函数打印出集合a中前m个元素,这里实际上是打印出满足条件的一个子集
//输出集合a中前m个数显示 void printSet(int * a,int m) { for(int i=0;i<m;i++) cout<<a[i]; cout<<endl; }2)排列问题
从分析中可以看出这是典型的递归思路,排列算法如下:
//求排列 void Permutation(int * src,int n,int * a,int i) { if(i<0) { printSet(a,n); } else { for(int j=i;j>=0;j--) { int temp=src[i]; src[i]=src[j]; src[j]=temp; a[i]=src[i]; Permutation(src,n,a,i-1); temp=src[i]; src[i]=src[j]; src[j]=temp; } } }
下面是求集合src={1,2,3}的排列组合的完整代码
#include "stdafx.h"
#include <iostream>
using namespace std;
//输出集合a中前m个数显示 void printSet(int * a,int m) { for(int i=0;i<m;i++) cout<<a[i]; cout<<endl; }
//求组合 //i表示当前处理是那个元素,src表示要求组合的原集合,n表示原集合中元素的个数 //a用于存储元集合的一个组合,m表示a重元素的个数 void Combination(int i,int * src,int n,int * a,int m) { if(i>=n) printSet(a,m); else { a[m]=src[i]; Combination(i+1,src,n,a,m+1); Combination(i+1,src,n,a,m); } }
//求排列 void Permutation(int * src,int n,int * a,int i) { if(i<0) { printSet(a,n); } else { for(int j=i;j>=0;j--) { int temp=src[i]; src[i]=src[j]; src[j]=temp; a[i]=src[i]; Permutation(src,n,a,i-1); temp=src[i]; src[i]=src[j]; src[j]=temp; } } }
int _tmain(int argc, _TCHAR* argv[])
{
int src[]={1,2,3};
int n=sizeof(src)/sizeof(int);
int * a=new int
;
cout<<"1,2,3的组合结果如下:"<<endl;
Combination(0,src,n,a,0);
cout<<"1,2,3的排列结果如下:"<<endl;
Permutation(src,n,a,n-1);
delete [] a;
system("PAUSE");
return 0;
}
运行结果如下:
相关文章推荐
- 有关多重集合的排列和组合问题
- 排列组合问题集合
- 对N各集合中的任意元素进行排列组合问题
- 多重集合的排列和组合问题
- 对N各集合中的任意元素进行排列组合问题
- 多重集合的排列和组合问题
- 多重集合的排列和组合问题
- 递归-排列组合问题
- 请初高中及大学老师回答,为什么?(鸽巢原理:排列组合问题)
- 排列组合问题的通用算法
- n个元素中取m个元素的组合、排列问题
- 数组排列组合问题——BACKTRACKING
- 排列组合问题-母函数
- java递归算法中的排列组合问题及排列组合去重
- 递归实现排列组合问题
- 全排列问题、八皇后问题、组合问题的递归解法
- 面试100题系列之5字符串的排列组合问题
- 组合数学+错排问题【p4071】[SDOI2016]排列计数
- 排列与组合问题
- hdu1261(组合排列问题)