递归实现排列型枚举

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

1、题目描述

把1 ~ n这n个整数排成一行后随机打乱顺序,输出所有可能的次序。

输入格式

输入一个整数n。

输出格式

按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围

1\leqn\leq9

输入样例

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值