组合生成的快速算法(C语言)

| |
| 不指定 September 22, 2008 @ 20:21, Robin Hoo
在做思维体操时,需要一个高效的组合生成算法。发现之前用PHP写的算法有些问题。修改成如下的代码,其中第一个参数是存储产生组合的数组,每次调用该参数会利用数组返回相应的组合,同时返回是否成功产生组合的标志。
      
C语言: 组合生成的高效算法
      
01 int combination(unsigned int **intArr,unsigned int m,unsigned int n)
02 {
03     int i,index;
04     if ((*intArr)==NULL)
05     {
06         (*intArr)=(unsigned int *)malloc(m*sizeof(unsigned int));
07         for(i=0;i<m;i++) (*intArr)[i]=i+1;
08         return 1;
09     }
10     index=m-1;
11
12     while(n-(*intArr)[index]<=m-index-1 && index>=0)
13     {
14         index--;
15     }
16     if (index>=0)
17     {
18         for(i=index;i<m;i++)
19         {
20             (*intArr)[i]++;
21             if(i<m-1) (*intArr)[i+1]=(*intArr)[i];
22         }
23         return 1;
24     }
25     free((*intArr));
26     (*intArr)=NULL;
27     return 0;
28 }
    


最后编辑: Robin Hoo 编辑于2008/09/22 20:37

文章来自: 本站原创
0 comment(s)
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写