递归实现排列型枚举

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

输入格式

一个整数 n。

输出格式

按照从小到大的顺序输出所有方案,每行 1 个。

首先,同一行相邻两个数用一个空格隔开。

其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。

数据范围

1≤n≤9

输入样例:

3

输出样例:

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

图解

Code

点击查看代码
#include<iostream>
using namespace std;
int n;
bool st[20]; //是否选过
int ways[20]; //保存方案 void dfs(int x){ //选到第x位
if(x > n){ //选到第n+1位,即得到一种方案
for(int i = 1; i <= n; i ++ ){ //输出方案
cout << ways[i] << " ";
}
puts("");
} for(int i = 1; i <= n; i ++ ){ //枚举每一位
if(!st[i]){ //如果没选过
st[i] = 1;
ways[x] = i; //选i
dfs(x + 1); //选下一位
ways[x] = 0; //恢复现场
st[i] = 0;
}
}
} int main(){
cin >> n;
dfs(1); //从第一位开始选
}

最新文章

  1. 现代DOJO(翻译)
  2. Ubuntu: 为firefox安装flash插件
  3. 启动、关闭Service
  4. Flex 医疗行程图
  5. 《锋利的jQuery》心得笔记--One Sections
  6. 每天一个JavaScript实例-从一个div元素删除一个段落
  7. Tree 使用方式
  8. GDI+简单现实文字旋转
  9. Prototype,创建型模式
  10. js原生设计模式——8单例模式之简约版属性样式方法库
  11. Prometheus监控学习笔记之Prometheus的Relabel,SD以及Federation功能
  12. Python 全栈开发三 python基础 条件与循环
  13. C# to IL 18 Glossary(术语)
  14. IDEA 快捷操作 Windows
  15. java.net.SocketException: Broken pipe
  16. 01.创建winserver2012r2+hyper-v+centos7
  17. Centos编译Hadoop 2.x 源码
  18. Linux-- su和sudo 切换用户
  19. lintcode-205-区间最小数
  20. javascript练习(二)

热门文章

  1. vue项目Eslint和prettier结合使用
  2. 后端框架学习1-----Spring
  3. .Net Core中获取appsettings.json中的节点数据
  4. 最全iOS 上架指南
  5. 陪你去看 Lodash.js 起步
  6. ElasticSearch 常见问题
  7. 解决Halcon转C#时,图像显示的问题
  8. 如何重启kafka
  9. hwlog--utils.go
  10. VMware 虚拟机打开电源失败