递归输出全部组合
#include <bits/stdc++.h>
using namespace std;int A[20];
int rec[20]; // 記錄組合數組
int n, k; // n取k// 從sta開始選k個,已選cur個
// dfs函數的功能用一句話概括就是填充rec[cur],填夠k個就是一種組合
void dfs(int sta, int cur) {if (cur == k) { // 打印一種組合for (int i = 0; i < k; i++) cout << rec[i] << " ";cout << endl;return;}for (int i = sta; i < n; i++) { rec[cur] = A[i];dfs(i + 1, cur + 1);}
}int main() {cin >> n;for (int i = 0; i < n; i++) cin >> A[i];for (k = 0; k <= n; k++) {cout << n << "C" << k << endl;dfs(0, 0);cout << endl;}return 0;
}
輸入:
4 1 2 3 4輸出:
4C04C1 1 2 3 44C2 1 2 1 3 1 4 2 3 2 4 3 44C3 1 2 3 1 2 4 1 3 4 2 3 44C4 1 2 3 4總結
- 上一篇: 【dfs】P1036 选数
- 下一篇: 【递推】P1028 数的计算