1、题目描述
把1 ~ n这n个整数排成一行后随机打乱顺序,输出所有可能的次序。
输入格式
输入一个整数n。
输出格式
按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
数据范围
1n
9
输入样例
3
输出样例
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
2、题目解析
如下如,采用dfs深度递归搜索树,加入n=3时,考虑每一个位置放哪个数,可以一直递归下去,直到最后一个位置也放置好了。维护两个状态数组,一个用来记录位置,一个用来记录数值。

代码如下(时间复杂度O(n!)) :
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

该博客介绍了如何使用深度优先搜索(DFS)算法来生成1到n的所有全排列。通过C++代码示例,展示了如何递归地遍历所有可能的排列组合,并按字典序输出。此问题与递归实现指数型枚举类似,都是利用DFS进行多维度的搜索。
最低0.47元/天 解锁文章
947

被折叠的 条评论
为什么被折叠?



