#include using namespace std; const int N = 1e2 + 10; // 定义最大数组大小 int a[N]; // 存储排列结果 bool vis[N]; // 标记数字是否被访问过 int n; // 排列的大小 // 回溯函数,dep表示当前处理到第几个数字 void dfs(int dep) { if (dep == n + 1) { // 如果已经处理完所有数字 for (int i = 1; i <= n; i++) { // 输出排列 cout << a[i] << " \n"[i==n]; } return; } for (int i = 1; i <= n; i++) { // 尝试将1到n的每个数字放入当前位置 if (vis[i]) continue; // 如果该数字已经被使用,跳过 vis[i] = true; // 标记该数字为已使用 a[dep] = i; // 将数字放入当前位置 dfs(dep + 1); // 递归处理下一个位置 vis[i] = false; // 回溯,恢复状态 } } int main() { cin >> n; // 输入排列的大小 dfs(1); // 从第一个位置开始递归 return 0; }