思路:
与全排列的思路一致,如果填到r个数就输出,如果没填到,就把当前的数赋给下一个数,然后搜索下一个。与全排列不同的是,组合的输出不需要考虑这个数是否使用过,因为需要从这些数中选数
int n,r;
int a[25];
void dfs(int k)
{
if(k > r)
{
for(int i=1;i<=r;i++)
printf("%d ",a[i]);
printf("\n");
return ;
}
for(int i=a[k-1]+1;i<=n;i++)
{
a[k] = i;
dfs(k+1);
}
}
int main()
{
cin >> n >> r;
dfs(1);
return 0;
}