编写一个实验程序,利用回溯法输出自然数1~n中任取r个数的所有组合
分析:从n个数当中取r个数,对n个数依次操作,对当前数取就放入数组当中,不取就直接操作下一个数。
粗糙算法:
#include<iostream>
using namespace std;
#include<algorithm>
#include<cstring>
#include<cstdio>
int n,r;
void f(int r,int n,int m,int A[],int d)
{
if(d>n+1)
{
return;
}
if(m==r)
{
for(int i=0;i<m;i++)
{
cout<<A[i];
}
cout<<endl;
}
else{
A[m++]=d;//当前k这个数要
f(r,n,m,A,d+1);//递归下一个数
m--;//当前k这个数不要
f(r,n,m,A,d+1);//继续递归下一个数
}
}
int main()
{
cin>>n;
int d[n];
int A[n];
memset(A,0,sizeof(A));
cin>>r;
f(r,n,0,A,1);
return 0;
}