zoukankan      html  css  js  c++  java
  • 解决排列组合问题的通用算法(转)

    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;
    }
  • 相关阅读:
    解释之前遗留的方法覆盖问题
    多态在开发中的作用
    多态的基础语法
    Go 统计汉子字符
    Go map
    Go make和new的区别
    Go 指针
    Go 切片
    Go数组
    Go中交换两个值类型
  • 原文地址:https://www.cnblogs.com/zhuor/p/306435.html
Copyright © 2011-2022 走看看