代码见下:
#include<stdio.h>
int n, m, p[25]; //设置全局变量
void dfs(int u, int start) { //枚举第u个位置,可枚举的数字为从start到n
int i;
if (n - start < m - u) return; //剩下未使用的数字少于还需的数字,无符合条件的答案,退出
if (u == m + 1) { //m个位置都已确定,开始打印
for ( i = 1; i <= m; i++) {
printf("%d ", p[i]);
}
printf("\n");
return;
}
for ( i = start; i <= n; i++) { //枚举第u个位置
p[u] = i; //记录所选的数字
dfs(u + 1, i + 1); //继续枚举下一个位置(为保证下一个数更大,从i+1开始枚举)
}
}
int main() {
scanf("%d %d", &n, &m);
dfs(1, 1); //递归起始点
return 0;
}