采用回溯法找问题的解,将找到的组合以从小到大顺序存于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;//存放一个生成的组合用于输出