解决排列组合问题的通用算法
很多网友发贴询问诸如:八皇后问题、彩票问题(从m中数中选择n(m>=n)的组合)等,其实这都可归结为排列组合的问题。解决这类问题,用for循环嵌套是不现实的(只能对指定的m、n编程,而且程序看上去异常繁琐),较好的方法是回朔法。下面给出这类问题的一般算法的c/c++描述:
int combine(int a[],int sub){
//a[1..?]表示候选集,sub表示一个排列(组合)的元素个数
{
int total=sizeof(a);
int order[sub+1];
int count=0;//符合条件的排列(组合)的个数
order[0]=-1;
for(int i=1;i<=sub;i++)
order[i]=i;
int k=sub;
bool flag=true;
while(order[0]!=-1){
if(flag){
for(i=1;i<=sub;i++)//输出符合要求的组合
printf("%d ",a[order[i]]);
printf("/n");
count++;
flag=false;
}
order[k]++;
if(order[k]==total+1){
order[k--]=0;
continue;
}
...
//在此加入order[k]的限制条件
//如果条件满足,则往下执行
//否则continue;
if(k<sub){
order[++k]=order[k-1];
continue;
}
if(k==sub)
flag=true;
}
return count;
}
解决排列组合问题的通用算法相关推荐
- 排列组合问题的通用算法
尽管排列组合是生活中经常遇到的问题,可在程序设计时,不深入思考或者经验不足都让人无从下手.由于排列组合问题总是先取组合再排列,并且单纯的排列问题相对简单,所以本文仅对组合问题的实现进行详细讨论.以在n ...
- 《算法笔记》—— 解决 排列组合问题 递归的灵活运用
深知自己的算法特别菜,所以想在算法这方面多下工夫 现在被各种专业课支配着,但每天都会抽出一点时间来学习算法 (^ - ^) 相信大家都了解 * 汉诺塔 * 这个问题,我当时学的是云里雾里的(泪目)-- ...
- 数学建模 | 用“双射”的思想解决排列组合问题
⚠警告:本期极度无聊,非专业人士迅速离开. "双射"(bijective)其实是个比较土味的数学名词,因为在关系代数中我们更喜欢称它为"一一映射".关系代数是研 ...
- 用DP解决排列组合问题
高中时学过的排列组合问题,蕴含着一种动态规划的思想,即: 若用二维数组的概念,即: ,但此处若不是简单的组合数,就应该对公式进行修改,根据题意来加一些其他条件. 如例题(印章),python代码如下: ...
- python 排列组合_python解决排列组合
笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', re ...
- python不重复排列组合_python解决排列组合
笛卡尔积:itertools.product(*iterables[, repeat]) import itertools for i in itertools.product('BCDEF', re ...
- c语言解决排列组合公式问题
分析: C语言调用函数,求C(m,n). 根据数学公式,自主创建函数即可. 下面是源代码: #include "stdio.h" long love(int a) {int i,n ...
- 算法 64式 17、排列组合算法整理
1算法思想 排列组合 1.1含义 排列: 含义:从元素列表中取出指定个数的元素进行排序 公式:从n个不同元素中取出m个元素的排列个数=n!/(n-m)! 组合: 含义:从元素列表中取出指定个数的元素, ...
- 超详细排列组合问题解法
import java.util.ArrayList;/*** 组合算法* 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标* 代表的数被选中,为0则没选中.* 首先初始化, ...
最新文章
- java调用npoi_NPOI导出数据到Excel
- HTTP头入门到精通(每一个HTTP消息头解释)
- 实例讲解hadoop中的map/reduce查询(python语言实现)
- Python自动化之模板继承和cookie
- VTK:图片之ImageMask
- flask接收前台的form数据
- mysqld --initialize --console 没有 打印信息_JavaScript设计模式--装饰者模式
- Spring DI(依赖注入)注解篇
- 利用脚本启动java程序
- C++类模版demo
- (转)Android Binder设计与实现 – 设计篇
- 供参考的 php 学习路线
- CentOs6.5安装使用数据恢复软件extundelete
- 机器学习实战 基于_资料 |《机器学习实战:基于 Scikit-Learn、Keras 和 TensorFlow(第二版)》...
- 想请问下PDF双面打印时(打印机自动双面打印)为什么反面那页的内容是倒过来的,应该怎么设置?...
- lintcode 983. 棒球游戏
- 分布式系统中可用性及容错性的区别
- Windows***与提权技巧汇总
- AcWing 671. DDD
- scp 的拷贝限速功能