组合数的简单求法(dfs)

Posted fengzeng666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了组合数的简单求法(dfs)相关的知识,希望对你有一定的参考价值。

组合数的具体应用可以参考这个例子:https://www.cnblogs.com/FengZeng666/p/10496223.html

 

下面这段代码可以作为求组合数的固定套路或者公式

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 
 6 int sum = 0;
 7 int a[1000];
 8 
 9 void dfs(int step, int n, int m)    //从n个数里面选出m个,存入一维数组a
10 {
11     if (step == (m+1))
12     {
13         ++sum;    //组合总数
14         for(int i = 1; i <= m; ++i)
15             cout << a[i] << " " ;    //所有组合
16         cout << endl;
17         return;
18     }
19     else
20     {
21         for (int i = 1; i <= n; i++)
22         {
23             //保证取得的这5个数大小是递增的,避免重复取
24             if (i > a[step - 1])
25             {
26                 a[step] = i;    //使用数组a保存已经取出的数,下标0不用
27                 dfs(step + 1, n, m);
28             }
29         }
30     }
31 }
32 
33 int main()
34 {
35     memset(a, 0, sizeof(a));
36     cout << "所有组合为:" << endl;
37     dfs(1, 6, 2);
38     cout << endl;
39     cout << "共有" << sum << "种组合" << endl;
40 
41 }

 

以上是关于组合数的简单求法(dfs)的主要内容,如果未能解决你的问题,请参考以下文章

逆序数的几种求法

树的直径的两种求法

总结LCA的4种求法

python实现基础的深度优先搜索(DFS, depth first search)解决数的全排列问题

对于一遍遍历的众数求法

欧拉函数性质与求法 [数论][欧拉函数]