产生n个数全排列的算法
2024-09-14 07:50:13
给定n个数{1...n},如何给出这n个数的全排列呢?
给定一个整数k,我们给它一个向左或向右的方向,k(->)或者k(<-),我们说k是可以移动的,如果它的方向指向一个相邻的比它小的数,例如
2(->)6(->)3(->)1(<-)5(->)4(->)
那么只有3,5,6是可以移动的。
全排列的算法如下:
从1(<-)2(<-)...n(<-)开始
当存在一个可以移动的数时,
(1)找到最大的可以移动的数m
(2)交换m和它的方向指向的相邻的数
(3)对所有满足p>m的p,改变所有p的箭头方向
例如当n=3时:
1(<-)2(<-)3(<-)
1(<-)3(<-)2(<-)
3(<-)1(<-)2(<-)
3(->)2(<-)1(<-)
2(<-)3(->)1(<-)
2(<-)1(<-)3(->)
最新文章
- JustWeTools - 自定义控件集
- window.parent与window.openner区别介绍
- CentOS6.5 Openssl版本升级
- Codeforces 13C Sequence --DP+离散化
- web开发常用的js验证,利用正则表达式验证邮箱、手机、身份证等输入
- Activiti源码浅析:Activity与Task
- 轻量级的原型设计工具-Axure RP
- 怎样在Eclipse中使用debug模式调试程序
- Linq 集合操作符 Except,Intersect,Union
- Python,是什么让我遇见你
- Android 如何解决dialog弹出时无法捕捉Activity的back事件
- Linux 检查端口gps命令
- centos7下使用docker安装nginx
- Android 之 <;requestFocus />;
- 【问题集】redis集群set报错(error) MOVED 11469 192.168.181.201:7002
- JAVA动态编译辅助类
- hibernate 一级缓存,二级缓存,查询缓存
- 简单shell expect程序
- 404 Note Found队 Alpha7
- Lucene介绍及简单入门案例(集成ik分词器)