全排列

mac2026-04-16  2

一、内容

给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数n。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤9

输入样例:

3

输出样例:

1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1

二 、搜索树:

三、代码

#include <cstdio> const int N = 15; int rec[N]; //记录一下选好的数字 int n; int vis[N]; //记录那个数字已经选了 //num代表已经选了几个数字了 void dfs(int num) { if (num == n) { //打印已经选好的数字 for (int i = 0; i < n; i++) printf("%d ", rec[i]); printf("\n"); return; //不再进行尝试了直接返回 } //尝试每一种可能 x for (int i = 1; i <= n; i++) { if (!vis[i]) { //代表i没有访问 vis[i] = 1; //进行标记 rec[num] = i; //将选好的数放在它的位置 dfs(num + 1); //进行下一个位置的搜索 //进行回溯 恢复现场 vis[i] = 0; } } } int main() { scanf("%d", &n); dfs(0); return 0; }
最新回复(0)