组合题6 个小题
已作答 0 / 6
1#include <algorithm>2#include <cstdio>3#include <cstring>4bool flag[27];5int n;6int p[27];7int ans = 0;8void dfs(int k) {9 if (k == n + 1) {10 ++ans;11 return;12 }13 for (int i = 1; i <= n; ++i) {14 if (flag[i]) continue;15 if (k > 1 && i == p[k - 1] + 1) continue;16 p[k] = i;17 flag[i] = true;18 dfs(k + 1);19 flag[i] = false;20 }21 return;22}23int main() {24 scanf("%d", &n);25 dfs(1);26 printf("%d\n", ans);27 return 0;28}29 在 dfs 函数运行过程中,k 的取值会满足 1≤k≤n+1。