全排列算法(C语言)

  • 思路
    • 图形理解
    • 树结构
  • 代码

思路

图形理解

我看先看一下从1–4的全排列,如下:

(1)就整体排列而言可以分为四组,分别是以1打头的,以2打头的,以3打头的,以4打头的。

(2)每一组中,除去第一个元素,又分别以剩余其它元素打一次头,以第一组元素为例,除去1后,又分别以2、3、4打头,如下:

从上图我们可以看出,1后面其实是2,3,4的全排列。

(3)以2,3,4为首又可以分为3组,然后再分别以剩余元素打头就求出以打头的所有元素。以2打头为例如下:

从上图我们可以看出,2后面其实是3,4的全排列。

除去1、2,然后再以3打头,后面跟上剩余元素4的全排列,就求出了以1,2,3打头的全排列了。

(4)只要将最开始的1,2,3,4使2和1交换位置,变成2,1,3,4然后重复上面步骤就可以求出以2打头的所有全排列,以此类推就可以求出所有全排列。

树结构

代码

#include<stdio.h>
int a[1000];//用于存储需要排列的数据//交换函数,用于将各个元素交换至打头
void swap(int x,int y){int t;t=a[x];a[x]=a[y];a[y]=t;
} void perm(int p,int q){if(p==q){//当p==q说明到了最后一个元素 ,输出int j;for(j=1;j<=q;j++){printf("%5d",a[j]);}printf("\n");}else{int i;for(i=p;i<=q;i++){//对从下标从p到q的元素进行全排列swap(p,i);//使逐个元素打头perm(p+1,q);//求剩余元素的全排列//将元素交换回去,也就是始终保持原来顺序,以第一层树为例,以2打头的是2,1,3,4//则以2打头完要恢复1,2,3,4//才便于将3打头变为3,2,1,4swap(p,i);}  }}int main(){int n;scanf("%d",&n);//输入n //初始化数组 int i;for(i=1;i<=n;i++){a[i]=i;} //排列函数 perm(1,n);//perm(x,y),将数组中第x至第y个元素进行全排列 return 0;
}

全排列算法(C语言)相关推荐

  1. [通用技术]在不同语言中用协程实现全排列算法(C++/Lua/Python/C#)

    我这里实现全排列的基本算法如下(C++): 1 #include <algorithm> 2 #include <iostream> 3 #include <vector ...

  2. 数组积木问题 c语言,全排列算法及解决数字搭积木问题

    如果你是做这道题不会,那么你可以看这道题的解题思路,如果你是不太理解全排列算法,那么你可以通过这个题来理解. 题目描述: 小明最近喜欢搭数字积木.一共有10块积木,每个积木上有一个数字,0~9. 搭积 ...

  3. 《数据结构与算法 C语言版》—— 3.8习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第3章,第3.8节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.8习题 1名 ...

  4. 【转】全排列算法非递归实现和递归实现

    来源:http://blog.csdn.net/e3399/article/details/7543861 (一)递归的全排列算法 (A.B.C.D)的全排列为 1.A后面跟(B.C.D)的全排列 2 ...

  5. 全排列的java算法_全排列算法原理和实现

    评论 # re: 全排列算法原理和实现  回复  更多评论 #include #include #define CHESSNUM 9 using namespace std; /*********** ...

  6. c语言常用算法pdf,妙趣横生的算法(C语言实现 第2版) 带目录完整pdf[94MB]

    <妙趣横生的算法(C语言实现 第2版)>是深受广大读者好评的<妙趣横生的算法(C语言实现)>一书的全新升级版.本书在第1版的基础上对原书内容做了大量的调整和补充,并将书中的实例 ...

  7. c语言贝叶斯分类,基于朴素贝叶斯分类器的文本分类算法(C语言)

    基于朴素贝叶斯分类器的文本分类算法(C语言) 基于朴素贝叶斯分类器的文本分类算法(C语言).txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情.#include ...

  8. 《数据结构与算法 C语言版》—— 2.5上机实验

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.5节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.5上机实验 实 ...

  9. 《数据结构与算法 C语言版》—— 2.7习题

    本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.7节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.7习题 1描 ...

最新文章

  1. 配置 Spring Batch 批处理失败重试
  2. Unity3D开发赛车Demo遇到的问题
  3. ML基石_12_NonLinearTransformation
  4. uploadify控制 上传图片到百度云存储
  5. 深度强化学习研究笔记
  6. 201621123023《Java程序设计》第7周学习总结
  7. [转]gcc生成动态库静态库
  8. 阿里高级技术专家张建飞:应用架构分离业务逻辑和技术细节之道
  9. 构建springboot微服务聚合工程
  10. hadoop yarn 获取日志_「大数据」「Hadoop」-安装及数据目录
  11. 怎么将图片旋转一定角度?
  12. 尚硅谷大数据Hadoop(1)技术之Hadoop(入门)
  13. 「镁客·请讲」问之科技翟鲁峰:希望可以用声音传递简易生活方式
  14. IE地址栏发生改变,页面没有刷新而保留在原页面的解决方法
  15. 【深度学习】Fashion-MNIST数据集简介
  16. 大型网络中内部网关路由协议(IGP)的选择
  17. python实现中考倒计时
  18. 2356,2372,2377,2388,2394
  19. php一点通,编程一点通app下载-编程一点通安卓版下载v1.0.1-游迅网
  20. 使用Rational Rose2007,画图书馆管理系统静态图

热门文章

  1. linux图形界面鼠标变成小手_win10系统中安装ubuntu子系统及图形界面
  2. Angular10教程--1.0 环境搭建
  3. Camera V4L2 架构分析
  4. Panzoid手把手教程,分分钟做出电影公司片头
  5. bilibili完结番剧分区数据抓取并发送到邮箱
  6. 彻底理解 AQS 我是懂了,你呢?
  7. 易班2016.net SDK RestSharp access_token获取错误 解决方案
  8. 【老九学堂】【初识C语言】位运算符
  9. 我们到底应该在大学里得到什么?
  10. springclound基础模块