解决排列组合问题的通用算法

原创 2007年10月10日 17:26:00
很多网友发贴询问诸如:八皇后问题、彩票问题(从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;
} 本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( ProgramFan.Com )  

9.9递归和动态规划(五)——确定某字符串的所有排列组合

/**  * 功能:确定某字符串的所有排列组合。  */ 注意:不考虑重复字符。若考虑重复字符,只需在加入permulations时去掉重复的字符串即可。 /** *...
  • shangqing1123
  • shangqing1123
  • 2015-08-11 17:45:18
  • 919

动态规划与排列组合

动态规划与排列组合By 刘未鹏(pongba)C++的罗浮宫(http://blog.csdn.net/pongba)TopLanguage(http://groups.google.com/grou...
  • pongba
  • pongba
  • 2008-06-05 11:45:00
  • 21173

通过动态规划方式实现全排列

原文:http://www.codeproject.com/Articles/891811/Calculating-Permutation-using-dynamic-programming The...
  • Joyhen
  • Joyhen
  • 2015-04-08 14:09:13
  • 1701

排列组合问题的通用算法

    尽管排列组合是生活中经常遇到的问题,可在程序设计时,不深入思考或者经验不足都让人无从下手。由于排列组合问题总是先取组合再排列,并且单纯的排列问题相对简单,所以本文仅对组合问题的实现进行详细讨论...
  • sharpdew
  • sharpdew
  • 2006-05-25 17:26:00
  • 59427

递归专题-排列组合问题

问题描述:输入一个字符串,然后将字符串所有字符排列组合,输出排列组合后的所有可能。 思路:把一个字符串看成两个部分,第一部分是它的第一个字符,第二部分是它后边的所有字符。求所有排列的过程可看做两...
  • qq_37565903
  • qq_37565903
  • 2018-01-17 10:23:42
  • 54

python 排列组合 解决实际问题

import itertools for s in itertools.permutations("lzxt"): r = [] for ss in ["lzxt", "ltzx", ...
  • yeyang911
  • yeyang911
  • 2013-11-27 08:56:16
  • 717

解决排列组合问题的通用算法

很多网友发贴询问诸如:八皇后问题、彩票问题(从m中数中选择n(m>=n)的组合)等,其实这都可归结为排列组合的问题。解决这类问题,用for循环嵌套是不现实的(只能对指定的m、n编程,而且程序看上去异常...
  • comeon_data
  • comeon_data
  • 2007-10-10 17:26:00
  • 423

动态规划实现组合数

#include using namespace std; int a[10001]; void printf(int n,int m){ a[0]=1; for(int i=1;i0;j--)...
  • song_4
  • song_4
  • 2015-07-24 16:12:50
  • 422

回溯法解决排列组合问题

package 算法和数据结构; /** * Filename : Backtracking.java * Author : zhihao_tian@126.com * Creation time :...
  • sdu_bupt
  • sdu_bupt
  • 2017-05-09 23:18:25
  • 456

笔试小技巧--隔板法解排列组合问题(附代码)

笔试小技巧--隔板法
  • Leeds1993
  • Leeds1993
  • 2017-05-05 17:22:34
  • 1785
收藏助手
不良信息举报
您举报文章:解决排列组合问题的通用算法
举报原因:
原因补充:

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