#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); }