题目
思路
使用dfs,每个数有选和不选两个情况
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
bool vis[25];
int n,m;
void dfs(int u,int st,int cnt){//当前在哪个数了,从哪个数开始,选了几个数了
if(n-u < m-cnt){ //如果剩余的数字<还需要选的个数,直接返回
return ;
}
if(u==m){
if(cnt==m){
for(int i=0;i<=n;i++){
if(vis[i]){
cout<<i<<" ";
}
}
cout<<endl;
}
return;
}
for(int i=st;i<=n;i++){//选
if(!vis[i]){
vis[i]=1;
dfs(u+1,i+1,cnt+1);
vis[i]=0;
}
}
dfs(u+1,st+1,cnt);//不选
}
int main()
{
cin>>n>>m;
dfs(0,1,0);//当前在0,从1开始,选了0个数
return 0;
}