输出排列 递归、回溯法
前缀List[0...k-1], 后缀为list[k..m]
(没有前缀)从第0个元素开始,起始位置list[0] 与list[0...n-1] 这N个元素交换位置,确定第0位的元素
前缀list[0] 后缀为list[1...n-1] ,将list[1]这个元素与list[2...n-1] 交换位置
类推直到,后缀为list[n-1]的时候输出
递推会改变原有的排列顺序,我们需要运用回溯法,
#include<iostream> using namespace std; int n; template<class T> inline void Swap(T &a,T &b){T temp=a;a=b;b=temp; } template<class T> void Perm(T list[],T k,T m){ //生成list[k...m]的所有排列方式 int i; if(k==m){for(int i=0;i<=m;i++) cout<<list[i];cout<<endl; } else //list[k..m]多种排列方式 {for(i=k;i<=m;i++){swap(list[k],list[i]);Perm(list,k+1,m);Swap(list[k],list[i]);//还原保证list的完整性 } } } int main() { // int n;while(cin>>n) {int a[n];for(int i=0;i<n;i++) cin>>a[i];Perm(a,0,n-1);} }
View Code
转载于:https://www.cnblogs.com/helloworld2019/p/10348756.html
输出排列 递归、回溯法相关推荐
- 青蛙换位问题之递归回溯法
青蛙换位的回溯问题并不是一个很复杂的问题,其中回溯就可以用迭代和递归的方法来实现,本人这里就只用递归回溯法了.本文章主要是参考了huey2672的一篇博客[青蛙换位],并对将其改为C++版本的. 主要 ...
- 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)
1. 题目描述 /*请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ...
- 递归回溯法求数独全部解
项目介绍 QT5做的数独求解程序,可以判断数独解的个数(如果非唯一解). 运行截图 源码说明 使用MSVC + QT5平台,故* .cpp和* .h文件均采用UTF8 + BOM编码.如果切换到Min ...
- 回溯法——设计一个算法在1、2、3... 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性和全排列
回溯法 题目描述: 设计一个算法在1.2.3- 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性.例如1+2+34-5+67-8+9=100 分 ...
- 非递归求解N皇后问题(回溯法)
一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题. 回溯法是一种应用广泛的算法.其关键点是解空间树和n元组可行解的定义. 非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求 ...
- 算法设计与分析第5章 回溯法(二)【回溯法应用】
第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...
- 算法分析五:回溯法与分⽀限界法
一.回溯法 1. 基本思想与解题步骤 基本思想: 把问题的解空间转化成了图或者树的结构表⽰,然后使⽤深度优先搜索策略进⾏遍历,遍历的过程中记录和寻找所有可⾏解或者最优解. 解题步骤: 针对所给问题,定 ...
- 回溯法|Backtracking
回溯法 回溯是一种算法,用于捕获给定计算问题的部分或全部解决方案,特别是约束满足问题.该算法只能用于能够接受"部分候选解"概念的问题,并允许快速测试候选解是否可以是一个完整的解.回 ...
- c语言实现全排列并存储,C语言实现全排列和回溯法总结
一.递归实现全排列 #include"cstdio" int A[]; void print_permutation(int n,int *A,int cur){ if(cur== ...
最新文章
- oracle中创建触发器
- ARIMA+参数选择p+d+q
- 定义系统消息 Specify system messages
- Mybatis学习之配置优化
- sed 和 awk 的一些用法
- c程序语言设计练习题,C语言程序设计练习题(含程序及参考答案)
- 深入理解并发/并行,阻塞/非阻塞,同步/异步
- Ubuntu终极指南
- 操作系统实验_Chcore -- 上交IPADS操作系统银杏书配套Lab实验笔记 - Lab2内存管理(一)...
- Ubuntu10.04下Linux内核编译的完整步骤
- 电厂数字化进阶之路(一):光明的使者
- 特殊日历计算 —— C++
- 播布客学习视频_C学习笔记_simple
- linux coreclr编译,.NET跨平台:在Linux Ubuntu上编译coreclr/corefx/dnx(20150617)
- 【kimol君的无聊小发明】—用python插入独创性声明
- android qq底部菜单栏,怎么关闭手机QQ底部导航栏的“看点”?
- 创业干货:在众说纷纭中找到前进的方向
- java SE 教程 10
- TypeError: can't pickle _thread.lock objects
- 怎么录制电脑内部声音?
热门文章
- gradle 失败 编译项目_ElasticSearch编译时如何选择Gradle版本?
- postgresql 自定义表变量_Oracle GoldenGate新支持开源关系型数据库PostgreSQL
- 屏蔽武汉ip地址 php,wordpress如何限制屏蔽IP地址
- android回收内存保存变量,android基础之onSaveInstanceState用法(一)保存容易被回收的自定义类的静态全局变量...
- python 成员运算符_Python的“ in”和“ not in”成员资格运算符
- Android Retrofit下载文件进度
- codable swift_使用Codable进行Swift JSON解析
- 在Windows Server 2008 R2上安装Ftp服务
- 十年 IT 老兵告诉你如何快速构建可直接落地、基于开源的低成本架构!
- redmine cannot load such file – rbpdf-font