#include<stdio.h>
int N = 0;
int M = 3;
int num[100] = {0};
bool visit[100] = {false};
int t_num[100] = {0};
int count = 0;
// n 个球中取m个
void dfs(int m, int index, int nn, int mm){
// 如果已经取到M个球了, 就不取了
if(m >= mm){
// 输出当前取法
for(int i = 0; i < 3; i++){
printf("%d, ", t_num[i]);
}
puts("");
count++;
return;
}
// 以 index 为起始取位置
for (int i = index; i < nn; i++){
// 在取第m个球
t_num[m] = num[i];
// 每取一个就少一个
// 前面的已经取过了, 后面不能取, i + 1. 作为下一次的开始,防止重复
dfs(m + 1, i + 1, nn, mm);
}
}
int main(){
N = 10;// 定义10个球
M = 3;// 要取3个
// 初始化
for(int i = 0; i < N; i++){
num[i] = i;
}
// 开始取球
dfs(0, 0, N, M);
// 一共多少种取法
printf("%d", count);
return 0;
}
C++组合算法
最新推荐文章于 2024-06-29 17:46:41 发布