算法设计与分析——递归与分治策略——全排列
算法设计与分析——递归与分治策略——全排列
全排列问题的解决是通过分治与递归思想来解决的
首先判断是否递归到了最后一位,如果递归到了最后一位,则输出他当前的全排列序列。
如果没有到达最后一位,则循环的交换该第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");
}
算法设计与分析——递归与分治策略——全排列相关推荐
- 算法设计与分析——递归与分治策略——最接近点对问题
[问题描述] 最近对问题要求在包含有n个点的集合S中,找出距离最近的两个点.设 p1(x1,y1),p2(x2,y2),--,pn(xn,yn)是平面的n个点. 严格地将,最近点对可能不止一对,此例输 ...
- 算法设计与分析——递归与分治策略——线性时间选择
顾名思义:这篇文章讲解的就是如果用线性时间算法来作出元素选择问题. 问题描述:给定线性序集中n个元素和一个整数k,1<=k<=n.要求找出这n个元素中第k小的元素,即如果将这个n个元素依其 ...
- 算法设计与分析——递归与分治策略——棋盘覆盖
问题描述 棋盘覆盖问题要求在2^k * 2^k 个方格组成的棋盘中,你给定任意一个特殊点,用一种方案实现对除该特殊点的棋盘实现全覆盖. 建立模型如图: 解决方案就是利用分治法,将方形棋盘分成4部分,如 ...
- 算法设计与分析——递归与分治策略——循环日程赛
问题描述: 非递归方案一:代码 #include<bits/stdc++.h> using namespace std;void gameTable(vector<vector< ...
- 算法设计与分析——递归与分治策略——快速排序
快速排序--递归算法 处理i,j的先后顺序不能改变 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达 ...
- 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)
上一篇文章学习了:[算法设计与分析]15 分治策略:芯片测试 文章目录 1. 快速排序的基本思想 1.2 时间复杂度的计算 1.21 最坏情况时间复杂度计算 1.22 最好情况时间复杂度 1.23 平 ...
- 【算法设计与分析】15 分治策略:芯片测试
上一篇文章学习了[算法设计与分析]14 分治算法的一般描述和分析方法 文章目录 1. 芯片测试 1.1 一次测试的过程 1.2 如何测试一块芯片的好坏 1.3 蛮力算法 1.4 分治算法设计思想 1. ...
- 【算法设计与分析】13 分治策略的设计思想
算法中很多方法都是可以采用分治策略进行设计与优化,那么什么是分治策略?如何使用分治策略进行算法的设计与分析? 文章目录 1. 分治策略的基本思想 1.1 二分检索的设计思想 1.2 二分归并排序的设计 ...
- 算法设计与分析——递归与分治——归并排序
归并排序采用的是一种分治的思想,如下图,先将要排序的元素分为两块,每个块又开始分裂,然后逐个按照特定顺序合并,合成最后我们需要的数组. 归并排序的复杂度: 时间复杂度:O(nlogn) 空间复杂度:O ...
最新文章
- 【DIY】简单粗暴低成本Arduino四轴机械臂方案,创客教育学习使用舵机首选方案!...
- 中国移动研究院2020春招技术综合JAVA在线编程题第一题
- 数据库设计系列9--将ER模型映射为表
- 事务未提交 别人能读取到吗_Mysql 事务-面试笔记
- HP LaserJet 1010卡纸解决方法
- xampp命令行连接MySql数据库
- C/C++语言经典、实用、趣味程序设计编程百例精解(2)
- Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
- 拓端tecdat|R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
- 多个文件或pdf合并生成一个Pdf
- Python脚本文件的创建运行
- Ubuntu18.04 Deb 包安装方法
- 电脑重装系统后被格式化了怎么恢复之前的数据?
- Flutter:表单Form
- 【ESP 保姆级教程】 疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义微信告警
- 你是否了解APP耗电问题?深入探索 Android 电量优化,flutter插件推荐
- python少儿编程008:海龟绘图画出奥运五连环!
- DVD项目: 用面向对象的思想做DVD租赁系统
- 华军:坚持就是胜利(附图)
- Java中当被除数比除数小时为什么计算结果都为0?
热门文章
- 如何一秒钟从头构建一个 ASP.NET Core 中间件
- 【Python可视化】利用Numpy绘制各种统计图表
- 【遥感物候】Hants NDVI时间序列谐波分析法数据重构,植被生长季曲线效果可佳(附Hants软件下载)
- C语言试题四十七之程序定义了N×M的二维数组,并在主函数中自动赋值。请编写函数function(int a[N][M], int m),该函数的功能是:将数组右上半三角元素中的值乘以m。
- Android之如何解决Android studio运行出现的HAX kernel modules is not installed
- 企业有了程序员为什么还要用 低代码/无代码
- gearman mysql编译_gearman初探(一、编译和安装)
- vue data数据修改_Vue 超清晰思维导图(7张),详细知识点梳理!
- 人生没有对与错,只是选择不同
- 豆瓣9分,颠覆世界观的好书,每读一章就感叹一次:原来如此!(免费领)