题面微变型的递归枚举组合型
#include <bits/stdc++.h>
using namespace std;
const int N = 30;
int n,m;
bool st[N];
int path[N];
void dfs(int u, int start){
if(u >= m){
for(int i = 0; i < m; i++){
printf("%3d",path[i]);
}
puts("");
return ;
}
for(int i = start; i <= n; i++){//升序
if(!st[i]){
path[u] = i;
st[i] = true;
dfs(u + 1, i + 1);
st[i] = false;
}
}
}
int main(){
cin >> n >> m;
dfs(0,1);
return 0;
}