前缀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

输出排列 递归、回溯法相关推荐

  1. 青蛙换位问题之递归回溯法

    青蛙换位的回溯问题并不是一个很复杂的问题,其中回溯就可以用迭代和递归的方法来实现,本人这里就只用递归回溯法了.本文章主要是参考了huey2672的一篇博客[青蛙换位],并对将其改为C++版本的. 主要 ...

  2. 剑指offer:矩阵中的路径(递归回溯法DFS类似迷宫)

    1. 题目描述 /*请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经 ...

  3. 递归回溯法求数独全部解

    项目介绍 QT5做的数独求解程序,可以判断数独解的个数(如果非唯一解). 运行截图 源码说明 使用MSVC + QT5平台,故* .cpp和* .h文件均采用UTF8 + BOM编码.如果切换到Min ...

  4. 回溯法——设计一个算法在1、2、3... 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性和全排列

    回溯法 题目描述: 设计一个算法在1.2.3- 9(顺序不能变)数字之间插入+ 或 - 或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性.例如1+2+34-5+67-8+9=100 分 ...

  5. 非递归求解N皇后问题(回溯法)

    一般而言,回溯法可以说是一种穷举法,适合于求解各种深度优先搜索的问题. 回溯法是一种应用广泛的算法.其关键点是解空间树和n元组可行解的定义. 非递归回溯法程序的结构基本上是相同的,该程序的结构可以用求 ...

  6. 算法设计与分析第5章 回溯法(二)【回溯法应用】

    第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...

  7. 算法分析五:回溯法与分⽀限界法

    一.回溯法 1. 基本思想与解题步骤 基本思想: 把问题的解空间转化成了图或者树的结构表⽰,然后使⽤深度优先搜索策略进⾏遍历,遍历的过程中记录和寻找所有可⾏解或者最优解. 解题步骤: 针对所给问题,定 ...

  8. 回溯法|Backtracking

    回溯法 回溯是一种算法,用于捕获给定计算问题的部分或全部解决方案,特别是约束满足问题.该算法只能用于能够接受"部分候选解"概念的问题,并允许快速测试候选解是否可以是一个完整的解.回 ...

  9. c语言实现全排列并存储,C语言实现全排列和回溯法总结

    一.递归实现全排列 #include"cstdio" int A[]; void print_permutation(int n,int *A,int cur){ if(cur== ...

最新文章

  1. oracle中创建触发器
  2. ARIMA+参数选择p+d+q
  3. 定义系统消息 Specify system messages
  4. Mybatis学习之配置优化
  5. sed 和 awk 的一些用法
  6. c程序语言设计练习题,C语言程序设计练习题(含程序及参考答案)
  7. 深入理解并发/并行,阻塞/非阻塞,同步/异步
  8. Ubuntu终极指南
  9. 操作系统实验_Chcore -- 上交IPADS操作系统银杏书配套Lab实验笔记 - Lab2内存管理(一)...
  10. Ubuntu10.04下Linux内核编译的完整步骤
  11. 电厂数字化进阶之路(一):光明的使者
  12. 特殊日历计算 —— C++
  13. 播布客学习视频_C学习笔记_simple
  14. linux coreclr编译,.NET跨平台:在Linux Ubuntu上编译coreclr/corefx/dnx(20150617)
  15. 【kimol君的无聊小发明】—用python插入独创性声明
  16. android qq底部菜单栏,怎么关闭手机QQ底部导航栏的“看点”?
  17. 创业干货:在众说纷纭中找到前进的方向
  18. java SE 教程 10
  19. TypeError: can't pickle _thread.lock objects
  20. 怎么录制电脑内部声音?

热门文章

  1. gradle 失败 编译项目_ElasticSearch编译时如何选择Gradle版本?
  2. postgresql 自定义表变量_Oracle GoldenGate新支持开源关系型数据库PostgreSQL
  3. 屏蔽武汉ip地址 php,wordpress如何限制屏蔽IP地址
  4. android回收内存保存变量,android基础之onSaveInstanceState用法(一)保存容易被回收的自定义类的静态全局变量...
  5. python 成员运算符_Python的“ in”和“ not in”成员资格运算符
  6. Android Retrofit下载文件进度
  7. codable swift_使用Codable进行Swift JSON解析
  8. 在Windows Server 2008 R2上安装Ftp服务
  9. 十年 IT 老兵告诉你如何快速构建可直接落地、基于开源的低成本架构!
  10. redmine cannot load such file – rbpdf-font