不剪枝
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 30;
int m, n;
int way[N];
void dfs(int u, int start) {
if (u == m) {
for (int i = 0; i < m; i ++ ) printf("%d ", way[i] + 1);
puts("");
return;
}
for (int i = start; i < n; i ++ ) {
way[u] = i;
dfs(u + 1, i + 1);
way[u] = 0; // 恢复现场
}
}
int main() {
scanf("%d%d", &n, &m);
dfs(0, 0);
return 0;
}
剪枝
void dfs(int u, int start) {
if (u + n - start < m) return;
...