#以下是我的代码和思路
```
#include #define L 12
using namespace std;
int n;//全排列的长度
int answer[L];//最后输出的答案
bool visit[L];//表示每个数是否用过
void dfs(int floor)//搜索,floor是当前搜的层数,表示的是到此为止,已经确定的全部排列的数的个数
{
if (floor == n)//如果已经枚举完了,就输出
{
for (int i = 1; i <= n; i++)//输出第i个数
{
printf("%d%c", answer[i], " \n"[i == n]);//输出
}
}
else
{
for (int i = 1; i <= n; i++)//枚举,看到此为止有哪些数没用过
{
if (!visit[i])//这个数没有用过
{
visit[i] = 1;//标记这个数用过了
answer[floor + 1] = i;//标记第floor + 1个数是多少
dfs(floor + 1);//进行下一层搜索
answer[floor + 1] = 0;//取消标记(回溯)
visit[i] = 0;//取消标记(回溯)
}
}
}
return;//结束
}
int main()
{
scanf("%d", &n);//输入
dfs(0);//进行深搜
return 0;//完结撒花,谢谢观赏
}
```
> 据说看到这里的人运气都不会差,点个五分吧