dfs递归实现组合型枚举
生活随笔
收集整理的這篇文章主要介紹了
dfs递归实现组合型枚举
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
從自然數1,2,…,n,從中任取r個數,輸出所有組合。
輸入
一行兩個自然數n、r(1<n<21,1≤r≤n)。
輸出
所有的組合,每一個組合占一行且其中的元素按由小到大的順序排列,每個元素占三個字符的位置,所有的組合也按字典順序。
樣例輸入
5 3
樣例輸出
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
代碼如下:
#include <iostream> using namespace std; const int N = 25; bool st[N]; int a[N]; int n, k;void dfs(int u, int d) {if (u > k) {for (int i = 1; i <= k; i++) {cout<<a[i]<<" ";}cout << endl;return ;//因為我們要讓它回到原來的位置,所以要加return(回溯)}for (int i = d + 1; i <= n ; i++) {if (!st[i]) {a[u] = i;st[i] = true;dfs(u + 1, i);st[i] = false;a[u] = 0;}} }int main() {cin >> n >> k;dfs(1, 0);return 0; }總結
以上是生活随笔為你收集整理的dfs递归实现组合型枚举的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [蓝桥杯2018初赛]分数-找规律
- 下一篇: [蓝桥杯2018初赛]乘积尾零-数论