全排列:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列

eg:{1,2,3},则123,132,213,231,312,321为它的全排列

思路:二叉树,深度优先搜索(dfs);

说人话就是:

假如是1-3的全排列 首先 遍历第一个位置 为1,第二个位置为2,第三个位置为3,排满后1 2 3;

再将第三个位置清空1 2 * ;

此时第三个位置不能为4(因为1-3最大为3)所以不填继续清空第二个位置1 * *;

此时第二个位置可以为3,第三个位置可以为2

排后 1 3 2;

代码实现:

#include<iostream>
using namespace std;//输出n的全排列
int n;//数组大小
const int len = 11;//将排列顺序存入数组a中
int a[len];//判断数组a中有无此元素 初始化为false 表示a无此元素
bool hashTable[len] = {false} ;//全排列函数
void test(int index)//index表示位置 默认从第一个位置开始
{//防御性编程 判断是否越界if (index == n + 1){for (int i = 1; i <= n; i++){cout << a[i] << ' ';}cout << endl;return;}//遍历每个位置的可能出现的数据 i为这个位置上的数for (int i = 1; i <= n; i++){if (hashTable[i] == false)//判断当前排列中有无此元素{a[index] = i;      //第index位置为i,存入数组hashTable[i] = true; //若没有则放入并且hashtable为真test(index + 1);   //往下一个位置插入元素 注意数组下标可能越界hashTable[i] = false;//“回溯”<=> 最后一个位置插入后 再从后向前清空该位置的数据并且替换//比如 123 回溯后变成 1** 此时有for循环再次插入值 变为 132 }}
}int main()
{cin >> n;//从第一个位置开始插入数据遍历test(1);return 0;
}

结果展示:

c++ 递归算法求全排列相关推荐

  1. Java递归求全排列详解

    Java递归求全排列详解 推荐博客: 博客园Java全排列递归算法,结尾的解释很形象了 csdn的大佬写的,和我下面的代码思路基本一致 全排列的递归思想解释: 全排列的数学定义就不再过多解释,考虑递归 ...

  2. 三种求全排列方式之比较

    一共有三种求全排列的方式: 第一种就是只适合用于非可重集的DFS实现 第二种就是可以用于可重集上的刘汝佳书上的代码 第三种就是STL中的next--permutation 在对这三种方式做了比较之后发 ...

  3. PermutationsUnique,求全排列,去重

    问题描述:给定一个数组,数组里面有重复元素,求全排列. 算法分析:和上一道题一样,只不过要去重. 3 import java.util.ArrayList; 4 import java.util.Ha ...

  4. 蓝桥杯笔记:(给的元素不重复)求全排列(排列不可重复,排列可重复)

    1.各个元素不重复 abc,acb,....... 用next_permutataion()求全排列 #include<iostream> #include<algorithm> ...

  5. C++ STL求全排列和组合

    C++11 STL内置了求全排列的模板函数next_permutation和prev_permutation,属于<algorithm>头文件和std命名空间,使用非常方便.例如: vec ...

  6. 递归求全排列的学习与理解

    递归求全排列 全排列: 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列. 例题: 输出自然数 1 到n所有 ...

  7. 专题训练(9) 1001 求全排列(1)

    目录 专题训练(9) 1001 求全排列(1) 程序设计 程序分析 专题训练(9) 1001 求全排列(1) [问题描述] 输入一个正整数n, 请按照字典序输出1-n的全排列. [输入形式] 输入包含 ...

  8. LeetCode:Permutations, Permutations II(求全排列)

    Permutations Given a collection of numbers, return all possible permutations. For example,  [1,2,3]  ...

  9. 应用回溯算法求全排列

    从第一位开始依次确定每一位的数字,当确定到 k 位时就分别将第 k 位及之后的数字放到第 k 位,然后按同样的方法继续确定下一位,直到最后一位被确定. 应用回溯的处理思想枚举所有的可能的排列方式. 直 ...

最新文章

  1. 世界人口钟实时数据_中美面积人口数据对比,2020年8月,值得了解的细节
  2. 在secureCRT软件上运行一些简单的python脚本
  3. 数据与程序分离——程序中那些表的事儿
  4. vue中地图怎么标记数据库传过来的点_【Point小数点 图表挑战总结03】如何使用六边形网格地图(下)...
  5. 分析ip流量的python脚本
  6. Win11系统使用Excel表格的时候很卡怎么办
  7. 如何设计一个优秀基表结构
  8. 常用排序算法(八)桶排序
  9. 减小数据泄密负面影响的办法
  10. TIMESTAMP与DATETIME的区别
  11. 帆软日期参数联动方法
  12. QTeewidget逐行进行遍历(递归)
  13. JSP(6)简单购物车实现
  14. 高频量化交之李庆:在华尔街狼共舞的岁
  15. CSC与Roslyn编译
  16. html控制树莓派小车,用树莓派来制作简单的遥控小车
  17. 【矩阵论】2. 矩阵分解——SVD
  18. 知识付费海哥:知识变现三剑客
  19. 显示屏漏光会有什么影响
  20. CSMA/CD 和 CSMA/CA 之原理

热门文章

  1. DPM learn.cc编译
  2. 【知识兔】自学Excel之8:数据输入与编辑(基础操作)
  3. 钉钉-日程与任务管理
  4. JaCoCo Report结果转换成excel
  5. 使用scratch结合Dsbot机器人做一个抢答器!
  6. 计算机开始按钮的功能,Windows7系统开始菜单有哪些新增的功能
  7. Charles安装及使用教程
  8. 手把手教你绘制自定义地图
  9. Google Dremel 原理 – 如何能 3 秒分析 1PB
  10. 荣耀加冕,追梦不休 | 我的大学时光