白天有雨

此处应该有掌声

导航

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

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;
}

posted on 2005-12-28 12:33  卓如  阅读(1164)  评论(1编辑  收藏  举报