原题链接
题目思路,因为数组范围n<=20,故可用dfs,dfs内传入两个参数,一个是当前元素个数,一个是start。有不懂的可以评论区随时问我,有问必答。
#include<iostream>
#include<iomanip>
using namespace std;
int n,m;
int a[25];
bool flag[25];
void dfs(int k,int start){
if(k>=m) //当元素总个数>=m时,输出打印
{
for(int i=0;i<m;i++){
cout << setw(3) <<a[i];
}
cout<<endl;
return;
}
for(int i=start;i<=n;i++){//因为组合输出是升序,故从start开始for循环就可以
if(flag[i]==0){//当i元素没走过
a[k]=i;
flag[i]=1;
dfs(k+1,i+1);
flag[i]=0; //回溯
}
}
}
int main(){
cin>>n>>m;
dfs(0,1);
return 0;
}