博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列解析【递归方法】
阅读量:5285 次
发布时间:2019-06-14

本文共 850 字,大约阅读时间需要 2 分钟。

定义

         从n个元素中取出m个元素进行排列,当n=m时这个排列被称为全排列。

递归法

          我们要对前n个数进行全排列,那么首先我们可以发现第一位数可以是1~n中的任意一位,枚举第一位数的n种可能,然后我们就可以再去求剩下n-1位,确定第二位后再递归剩下的n-2位,一直递归即可求解。

步骤

1.首先枚举全排列第一个位置的元素,即让其分别为1,2,3……n。

2.接着开始枚举第二个位置的元素,一直递归,直到最后一个元素。

3.记得还原数组,否则数组的值会被改变,影响后面排列。

4.如果找到一个排列,就输出。

代码

#include
#include
using namespace std;void perm(int *a,int p,int q) //其中初始时p指向数组头元素的下标,q指向尾部元素的下标{ if(p==q) //说明已经找到一个排列,输出他们 { for(int i=0;i<=q;++i) printf("%d ",a[i]); printf("\n"); } else { for(int i=p;i<=q;++i) //枚举前缀 { swap(a[i],a[p]); //交换值,即前缀的值 perm(a,p+1,q); swap(a[i],a[p]); //数组还原 } }}int main(){ int a[4]={1,2,3,4}; perm(a,0,3); return 0;}

结果

备注:如果还有疑问或者想了解更多请戳链接看视频讲解

转载于:https://www.cnblogs.com/aerer/p/9930952.html

你可能感兴趣的文章
网络协议分析软件
查看>>
wpf的VisualStateManager
查看>>
leetcode 383. 赎金信(Ransom Note)
查看>>
Mysql联合查询UNION和UNION ALL的使用介绍
查看>>
node js学习(二)——REPL(交互式解释器)
查看>>
百度地图简单使用——添加折线,圆形等(html,js)
查看>>
Spring @Transactional ——事务回滚
查看>>
发货出库单默认不设置打样仓库
查看>>
NMON记录服务器各项性能数据
查看>>
Xitrum学习笔记05 - 模板引擎
查看>>
JavaBase 变量,数据类型和运算符
查看>>
Android Audio Focus的应用(requestAudioFocus)
查看>>
1django 视图与网址
查看>>
实现如下语法的功能:var a = (5).plus(3).minus(6); //2
查看>>
MFC添加背景图片
查看>>
未找到arm-linux-gcc解决办法
查看>>
统计Xcode项目代码行数
查看>>
SharePoint回环检查(Loopback Check)相关问题
查看>>
戏说 .NET GDI+系列学习教程(三、Graphics类的应用_验证码)
查看>>
Oracle tnsnames.ora
查看>>