位置x不断向右移动,同时dfs
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 10; int n; int vis[maxn]; // 已选 int a[maxn]; int ans[maxn]; int f(int x) // x表示枚举到了哪个位置 { if (x > n)//递归结束 { for (int i = 1; i <= n; i++) { cout << setw(5) <<ans[i];//保留五个场宽 } cout << endl; } for (int i = 1; i <= n; i++) { if (!vis[i])//没选,就选 { vis[i] = 1; // 选择 ans[x] = i; // 记录选择的数 f(x + 1); // 继续看下一个数 // 恢复现场 vis[i] = 0; ans[x] = 0; } } } int main() // 依次枚举每个位置放哪个数 { cin >> n; f(1); }