题解:P10448 组合型枚举
组合数,可用 dfs 解决,思路就是先选一个数,并标记,后面依次寻找未标记的数,构造成功后输出。
#include<bits/stdc++.h>
using namespace std;
int n, r;
int a[100000];//存放选出的数
bool b[100000];//标记
void print(){//依次输出
for(int i = 1; i <= r; i ++){
cout << a[i] << " ";
}
printf("\n");
}
void dfs(int k){
if(k == r + 1){//选完了
print();
return;
}
for(int i = a[k - 1] + 1; i <= n; i ++){
if(b[i] == 0){//未标记
a[k] = i;
b[i] = true;
dfs(k + 1);
b[i] = false;//用完就解除标记
}
}
}
int main(){
scanf("%d%d", &n, &r);
dfs(1);
return 0;
}
posted on 2024-05-15 20:33 zhangzirui66 阅读(33) 评论(0) 收藏 举报 来源