##[$AcWing$ $842$. 排列数字](https://www.acwing.com/problem/content/description/844/) ### 一、题目描述 给定一个整数 $n$,将数字 $1∼n$ 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 **输入格式** 共一行,包含一个整数 $n$。 **输出格式** 按字典序输出所有排列方案,每个方案占一行。 **数据范围** $1≤n≤7$ **输入样例:** ```cpp {.line-numbers} 3 ``` **输出样例:** ```cpp {.line-numbers} 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 ``` ### 二、实现代码 ```cpp {.line-numbers} #include using namespace std; const int N = 10; int n; int a[N], al; bool st[N]; void dfs(int u) { // 如果到达了终点 if (u == n + 1) { for (int i = 0; i < n; i++) printf("%d ", a[i]); puts(""); return; } for (int i = 1; i <= n; i++) if (!st[i]) { a[al++] = i; st[i] = true; dfs(u + 1); st[i] = false; al--; } } int main() { cin >> n; // 开始 dfs(1); return 0; } ```