实现全排列的另一种方法,就是实现递归。

实现思路:    

    假如 allsort(a b c);分治思想化为a+allsort(b c); b+allsort(a c), c+allsort(a b);

递归一层后计算第二层时:如allsort(b c)时,化为b+allsort(c) 和 c+allsort(b);

此时问题就明显了,首先确定一个元素,求剩下的全排列,如此类推下去做一个递归;

实现代码:

 #include <stdio.h>#define N 4int a[N];void perm(int);void print();void move(int, int);int main(){int i;for(i = 0; i<N; i++){scanf("%d",&a[i]);}perm(0);}void perm(int offset){int i;if(offset == N-1){print();return;}else{for(i = offset;i < N; i++){move(i, offset);perm(offset + 1);move(i, offset);}}}void print(){int i;for(i = 0; i < N-1; i++)printf("%d ",a[i]);printf("\n");}void move(int i, int offset){int temp;temp = a[offset];a[offset] = a[i];a[i] = temp;}

自此, 全排列的递归算法就算实现了。。。

转载于:https://www.cnblogs.com/fightingxu/archive/2012/12/15/2819786.html

实现全排列的另一种方法(续)相关推荐

  1. python基础入门:实现(无重复字符)字符串的全排列的两种方法

    求任意一个字符串的全排列组合,例如a='123',输出 123,132,213,231,312,321.(暂时假定字符串没有重复) 目前有两种解决的方法 方法一: def str_sort(s='') ...

  2. WPS会员如何取消自动续费?微信/支付宝/WPS共3种方法

    ​​WPS 开启会员模式之后还是非常好用的,老古这些年就一直使用 WPS 会员来办公,不过有些用户不想花钱购买会员了就想取消 WPS 会员的自动续费功能,那么应该如何取消呢?今天老古就简单说一下微信. ...

  3. 一种全新的软件界面设计方法(续)

    一种全新的软件界面设计方法(续) 点击下载文章所附代码 撰文:Aweay 你可转载,拷贝,但必须加入作者署名Aweay,如果用于商业目的,必须经过作者同意. 前段时间,笔者写了一篇关于使用Web页面设 ...

  4. php 求数组组合数,php实现求数组全排列,元素所有组合的方法

    下面小编就为大家带来一篇php求数组全排列,元素所有组合的方法总结.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 本文实例讲述了php求数组全排列,元素所有组合的方法总 ...

  5. Iterator to list的三种方法

    文章目录 简介 使用while 使用ForEachRemaining 使用stream 总结 Iterator to list的三种方法 简介 集合的变量少不了使用Iterator,从集合Iterat ...

  6. 【剑指offer 07】用迭代和递归两种方法重构二叉树(python实现)

    本文讲解一个经典的面试题,使用 python 通过迭代和递归两种方法重构二叉树. 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字 ...

  7. iphone新旧手机数据传输已取消_如何取消iPhone手机App自动扣费?三种方法让你不再被“偷”...

    一直以来苹果手机App这个自动续费真是让大家不胜其烦,钱虽然不多可总是平白无故这里十块,那里二十块的被扣也是不小的浪费,日常生活中为了追追剧.听听音乐.玩玩游戏难免会开通一些App会员而选择自动续费的 ...

  8. WPF程序将DLL嵌入到EXE的两种方法

    2019独角兽企业重金招聘Python工程师标准>>> WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了> ...

  9. 生成排列(全排列)的两种写法

    问题简述:输出任意各自然数(可不连续)所有不重复的排列,即全排列,要求所产生的任一数字序列中不允许出现重复的数字. 解决方法:1.交换法    2.数组访问法,两种方法都是由dfs回溯完成,也可以使用 ...

  10. 客户流失的原因 防止客户流失的6种方法

    客户流失率每降低5%,企业利润可以增加25%~95%.经济学中的二八定律也表明:企业未来收入的80%来自20%的现有客户.同时,<市场营销指标>调查显示向老客户进行销售,成功的概率大约为6 ...

最新文章

  1. caffe这个c++工程的目录结构
  2. C#弹窗提示输入密码
  3. IRC BOT原来是利用IRC下发CC命令——在xx云环境遇到了,恶意软件开的是6666端口...
  4. MYSQL GROUP_CONCAT 用法
  5. React状态管理大乱斗,横向对比Dva,Rematch,Mirror
  6. 机器学习笔记(十二)计算学习理论
  7. java calendar类_2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
  8. java 反射 私有成员_Java对类私有变量的暴力反射技术讲解
  9. Velox将在Pangolin上启动其算法交易机器人,并计划推出更多DeFi解决方案
  10. Flutter代码锦囊---集中管理路由与导航
  11. keepalived track script introduce
  12. Redis基本命令及相关用法
  13. 从Linux程序中执行shell(程序、脚本)并获得输出结果(转)
  14. GB28181标准文档以及GB35114标准文档免费下载
  15. vue 解决控制台Prop being mutated: “placement“报错
  16. 领峰:普通人如何炒白银技巧和方法有哪些
  17. 荣耀终端android面试,华为终端面试经验
  18. 2018年上半年阅读总结(系统架构师)
  19. 农村物流配送管理如何走出困境?这里有方案
  20. 微信小程序 实现带刻尺度滑块

热门文章

  1. 常用linux解压命令(原创)
  2. EXCHANGE 2003 恢复存储组的使用
  3. Qt5学习笔记之QQ登录界面四:界面布局
  4. 计算机组成原理学习四笔记一
  5. 【漏洞复现】局域网 ARP 中间人攻击 获取他人账号密码
  6. SCI论文之数据可用性陈述--Data availability statement
  7. debugging tools for windows 10下载安装问题
  8. Oracle每日一题——(1) 启动/停止监听
  9. 马云:员工表现不好,老板要先检讨
  10. XP引导Ubuntu--Ubuntu手记之系统配置