• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

组合算法的递归实现(C版)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

问题描述:给定一个集合x1,x2,…,xn, 输出从这n个元素中取m个的所有组合。

算法基本思想:如果xi为组合的一个元素,那么组合的下一个元素在x(i+1), x(i+2),….,Xn中选取。

递归实现如下:VC++编译测试通过。

#include 
#include 
#include 

#define MAX_LENGTH 20
char a[MAX_LENGTH]; //存储初始字符串
char r[MAX_LENGTH]; //存储组合结果

//n, 初始字符串的长度
//m, 所求组合的长度
//k, 初始集合中当前处理位置, a[k]
//index, 所求组合结果数组的索引, r[index]
void combination(int n, int m, int k, int index)
{
    int i;
    if(index == m) //输出组合结果
    {
        for(i = 0; i < m; ++i)
            printf("%c", r[i]);
        printf("\n");
        return;
    }

    for(i = k; i < n; ++i)
    {
        r[index] = a[i];
        combination(n, m, i + 1, index + 1);//注意第三个参数是i + 1
    }
}

int main(int argc, char** argv)
{
    strcpy(a, "abcde");
    combination(5, 3, 0, 0);
    system("pause");
    return 0;
}

鲜花

握手

雷人

路过

鸡蛋
专题导读
上一篇:
深度优先搜索的递归实现思路及实例源码(C++)发布时间:2022-05-14
下一篇:
汉诺塔(hanoi)递归实现的图示化(原创)发布时间:2022-05-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap