#include<iostream>
using namespace std;
int n,m;
const int N=26;
int w[N];
void dfs(int u,int st)//u表示的是当前选的位置,st是当前可以选的数
{
if(u-1+n-st+1<m)return ;//剪枝,当把后面所有数都选上都不够时,就停止搜索
if(u==m+1){
for(int i=1;i<=m;i++)
{
cout<<w[i]<<" ";
}
cout<<endl;
return ;
}
for(int i=st;i<=n;i++)
{
w[u]=i;
dfs(u+1,i+1);
w[i]=0;
}
}
int main()
{
cin>>n>>m;
dfs(1,1);
}

京公网安备 11010502036488号