求救!!软考的算法问题。。
问题描述:找出从自然数1,2,…,n中任取r个数的所有组合。
采用回溯法找问题的解,将找到的组合以从小到大顺序存于a[0],a[1],…,a[r-1]中,组合的元素满足以下性质:
(1) a[i+1]>a[i],后一个数字比前一个大;
(2) a[i]-i<=n-r+1。
按回溯法的思想,我编程如下:
#include "stdio.h"
#define MAXN 100
int a[MAXN];
void comb(int m,int r )
{
int i,j;
i=0;
a[i]=1;
do {
if (a[i]-i<=m-r+1)
{
if(i==r-1)
{
for (j=0;j<r ;j++)
{
printf("%4d",a[j]);
printf("\n---------------------------\n");
}
}
a[++i]++;
continue;
}
else
{
if(i==0) return;
a[--i]++;
}
} while(1);
}
void main()
{
comb(5,3);
}
可运行后没有结果,为什么呢?