给定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(->)

最新文章

  1. JustWeTools - 自定义控件集
  2. window.parent与window.openner区别介绍
  3. CentOS6.5 Openssl版本升级
  4. Codeforces 13C Sequence --DP+离散化
  5. web开发常用的js验证,利用正则表达式验证邮箱、手机、身份证等输入
  6. Activiti源码浅析:Activity与Task
  7. 轻量级的原型设计工具-Axure RP
  8. 怎样在Eclipse中使用debug模式调试程序
  9. Linq 集合操作符 Except,Intersect,Union
  10. Python,是什么让我遇见你
  11. Android 如何解决dialog弹出时无法捕捉Activity的back事件
  12. Linux 检查端口gps命令
  13. centos7下使用docker安装nginx
  14. Android 之 &lt;requestFocus /&gt;
  15. 【问题集】redis集群set报错(error) MOVED 11469 192.168.181.201:7002
  16. JAVA动态编译辅助类
  17. hibernate 一级缓存,二级缓存,查询缓存
  18. 简单shell expect程序
  19. 404 Note Found队 Alpha7
  20. Lucene介绍及简单入门案例(集成ik分词器)

热门文章

  1. Binary Tree Maximum Path Sum - LeetCode
  2. 初步接触LVS
  3. 【bzoj4443】【[Scoi2015]小凸玩矩阵】二分+二分图最大匹配
  4. C++中static、const使用方法简介
  5. java拦截器与过滤器打印请求url与参数
  6. 在eclipse上部署openfire 3.9.1源码,並配置openfire
  7. .net的远程调用
  8. ElasticSearch文档
  9. 【Hadoop】HIVE 数据表 使用
  10. 使用RAP搭建前端Mock Server