回溯法实现求1-n个自然数中r个数的组合

本文介绍如何利用回溯法解决求解n个自然数中r个数的组合问题,按照升序存储组合,并确保组合元素满足特定性质。通过深度优先搜索遍历解空间,最终得到所有可能的组合。

采用回溯法找问题的解,将找到的组合以从小到大顺序存于a[0],a[1],…,a[r-1]
中,组合的元素满足以下性质:

(1)     a[i+1]>a[i],后一个数字比前一个大;
(2)     a[i]-i<=n-r+1。

算法具体实现如下(以求5个自然数中3个数的组合):

如图所示:为一个求组合问题的解空间,以深度优先的方式对该树进行遍历,到叶节点是输出一个解,当整棵树遍历完成之后就可以得到问题的所有解:

算法的具体实现如下:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

int n;//自然数的个数
int r;
int *com;//存放一个生成的组合用于输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值