算法设计与分析——递归与分治策略——全排列

全排列问题的解决是通过分治与递归思想来解决的
首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列。
如果没有到达最后一位,则循环的交换该第K个元素与其后面的所有元素,每次交换后立即进入递归程序,进入下一层的递归。
代码1:

#include<iostream>
using namespace std;
template <class Type>
void perm(Type *list,int k,int m)
{if(k == m)//此时递归到了最后一层 {for(int i=0;i<=m;i++){cout<<list[i]<<" ";} cout<<endl;}else{for(int i=k;i<=m;i++)//将传来的参数区间的,进行该位置的所有全排列 {swap(list[k],list[i]);//交换位置 perm(list,k+1,m);//递归嵌套到下一层去,即少一位后的全排列 swap(list[k],list[i]);//回溯的思想,返回到原来没有排列的样子 }}
}
int main()
{int n;cout<<"输入需要进行全排列的数据长度:"<<endl;cin>>n;int list[n];cout<<"输入需要进行全排列的数据:"<<endl;for(int i=0;i<n;i++){cin>>list[i];} cout<<"输出全排列的结果:"<<endl; perm(list,0,n-1);return 0;}

#include<bits/stdc++.h>
using namespace std;
int number=0;
void arrange(vector<int> &nums,int left,int right)
{if(left==right){for(auto a:nums){cout << a << " ";}cout << endl;number++; }else{for (int i = left; i <= right; i++){swap(nums[left], nums[i]);arrange(nums, left + 1, right);swap(nums[left], nums[i]);}}
}int main()
{vector<int> nums = {1,2,3};int count = nums.size()-1;arrange(nums, 0,count);cout<<"全排列一共有"<<number<<"个排列"<<endl; system("pause");
}

算法设计与分析——递归与分治策略——全排列相关推荐

  1. 算法设计与分析——递归与分治策略——最接近点对问题

    [问题描述] 最近对问题要求在包含有n个点的集合S中,找出距离最近的两个点.设 p1(x1,y1),p2(x2,y2),--,pn(xn,yn)是平面的n个点. 严格地将,最近点对可能不止一对,此例输 ...

  2. 算法设计与分析——递归与分治策略——线性时间选择

    顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...

  3. 算法设计与分析——递归与分治策略——棋盘覆盖

    问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...

  4. 算法设计与分析——递归与分治策略——循环日程赛

    问题描述: 非递归方案一:代码 #include<bits/stdc++.h> using namespace std;void gameTable(vector<vector< ...

  5. 算法设计与分析——递归与分治策略——快速排序

    快速排序--递归算法 处理i,j的先后顺序不能改变 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达 ...

  6. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)

    上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...

  7. 【算法设计与分析】15 分治策略:芯片测试

    上一篇文章学习了[算法设计与分析]14 分治算法的一般描述和分析方法 文章目录 1. 芯片测试 1.1 一次测试的过程 1.2 如何测试一块芯片的好坏 1.3 蛮力算法 1.4 分治算法设计思想 1. ...

  8. 【算法设计与分析】13 分治策略的设计思想

    算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析? 文章目录 1. 分治策略的基本思想 1.1 二分检索的设计思想 1.2 二分归并排序的设计 ...

  9. 算法设计与分析——递归与分治——归并排序

    归并排序采用的是一种分治的思想,如下图,先将要排序的元素分为两块,每个块又开始分裂,然后逐个按照特定顺序合并,合成最后我们需要的数组. 归并排序的复杂度: 时间复杂度:O(nlogn) 空间复杂度:O ...

最新文章

  1. 【DIY】简单粗暴低成本Arduino四轴机械臂方案,创客教育学习使用舵机首选方案!...
  2. 中国移动研究院2020春招技术综合JAVA在线编程题第一题
  3. 数据库设计系列9--将ER模型映射为表
  4. 事务未提交 别人能读取到吗_Mysql 事务-面试笔记
  5. HP LaserJet 1010卡纸解决方法
  6. xampp命令行连接MySql数据库
  7. C/C++语言经典、实用、趣味程序设计编程百例精解(2)
  8. Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
  9. 拓端tecdat|R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
  10. 多个文件或pdf合并生成一个Pdf
  11. Python脚本文件的创建运行
  12. Ubuntu18.04 Deb 包安装方法
  13. 电脑重装系统后被格式化了怎么恢复之前的数据?
  14. Flutter:表单Form
  15. 【ESP 保姆级教程】 疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义微信告警
  16. 你是否了解APP耗电问题?深入探索 Android 电量优化,flutter插件推荐
  17. python少儿编程008:海龟绘图画出奥运五连环!
  18. DVD项目: 用面向对象的思想做DVD租赁系统
  19. 华军:坚持就是胜利(附图)
  20. Java中当被除数比除数小时为什么计算结果都为0?

热门文章

  1. 如何一秒钟从头构建一个 ASP.NET Core 中间件
  2. 【Python可视化】利用Numpy绘制各种统计图表
  3. 【遥感物候】Hants NDVI时间序列谐波分析法数据重构,植被生长季曲线效果可佳(附Hants软件下载)
  4. C语言试题四十七之程序定义了N×M的二维数组,并在主函数中自动赋值。请编写函数function(int a[N][M], int m),该函数的功能是:将数组右上半三角元素中的值乘以m。
  5. Android之如何解决Android studio运行出现的HAX kernel modules is not installed
  6. 企业有了程序员为什么还要用 低代码/无代码
  7. gearman mysql编译_gearman初探(一、编译和安装)
  8. vue data数据修改_Vue 超清晰思维导图(7张),详细知识点梳理!
  9. 人生没有对与错,只是选择不同
  10. 豆瓣9分,颠覆世界观的好书,每读一章就感叹一次:原来如此!(免费领)