//01背包思想 每个数都有 选 与 不选 两种可能
#include<cstdio>
int n, r;
bool Vis[21] = {false};
void DFS(int index, int nowR){
//边界
if(index == n+1){ // 说明已经遍历完了 n个数
if(nowR == r) { //说明刚好选了r个数
for(int i = 1; i <= n; i++ ){
if(Vis[i]) printf("%d", i); //输出组合
}
printf("\n");
}
return ;
}
//选第index个
if(nowR > r) return ; // 剪枝
Vis[index] = true; // 标记已经用了
DFS(index + 1, nowR + 1);
Vis[index] = false; // 释放
//不选第index个
DFS(index + 1, nowR);
}
int main(){
scanf("%d%d", &n, &r);
DFS(1,0);
return 0;
}
原文地址:https://www.cnblogs.com/GLcat/p/9642251.html
时间: 2024-11-05 18:35:30