组合数的简单求法(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)的主要内容,如果未能解决你的问题,请参考以下文章