实现全排列,递归实现

 #include <stdio.h>
#include <stdlib.h>
int n=; void swap(int *a, int *b)
{
int m;
m=*a;
*a=*b;
*b=m;
}
void perm(int list[], int k, int m)
{
int i;
if(k==m)
{
for(i=;i<=m;i++)
printf("%d ",list[i]);
printf("\n");
n++;
}
else
{
for(i=k;i<=m;i++)
{
swap(&list[k],&list[i]);
perm(list, k+, m);
swap(&list[k], &list[i]);
}
}
}
int main(void)
{
int list[]={,,,,,,};
perm(list,,);
printf("total:%d\n",n);
system("pause");
return ;
}

求字典顺序的下一个全排列

 #include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int m;
m=*a;
*a=*b;
*b=m;
}
void perm(int list[], int len)
{
int i=;
int k=;
int n=len;
int j=;
for(;j<=len;j++)
{
if(list[j-]<list[j])
i=j;
}
for(j=;j<=len;j++)
{
if(list[i-]<list[j])
k=j;
}
swap(&list[i-],&list[k]);
for(j=;j<=i;j++)
{
printf("%d ",list[j]);
}
for(j=len;j>i;j--)
{
printf("%d ",list[j]);
}
}
int main(void)
{
int list[]={,,,,,,};
perm(list,);
system("pause");
return ;
}

C语言实现全排列的更多相关文章

  1. c语言的全排列

    在c语言中实现全排列,对于刚接触c语言,还没学习算法的人来说,比较困难了吧.估计大佬也不会看这种基础的东西,全排列实现的办法很多,在c++中有一个专门的函数可以使用,但是在c中实现就有点困难了.如果你 ...

  2. C语言实现全排列和回溯法总结

    一.递归实现全排列 #include"cstdio" ]; void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i ...

  3. 漫谈 Clustering (2): k-medoids

    上一次我们了解了一个最基本的 clustering 办法 k-means ,这次要说的 k-medoids 算法,其实从名字上就可以看出来,和 k-means 肯定是非常相似的.事实也确实如此,k-m ...

  4. 递归实现全排列序列C语言实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下鄙人用递归回溯的办法,采用C语言实现了全排列序列,用以某些优化方案的原始方案的给定 #incl ...

  5. C语言程序设计100例之(31):全排列问题

    例31   全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式 n(1≤n≤9) 输出格式 由1-n组成的所有不重复的数字 ...

  6. 递归实现1-n的全排列(JAVA语言)

    思路: For example: 123的全排列= 1在最前面 23的全排列 + 2在最前面 13的全排列 + 3最前面 12的全排列 所以只需交换和最前面元素的位置,生成剩余元素的全排列即可. im ...

  7. 枚举全排列(包括数列中有重复数)的C语言实现

    据说是用了DFS的思想--然鹅并不知道这是DFS. 主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了-- 有重复数的话遇 ...

  8. 全排列问题(c语言实现)

    问题描述: 假设有数组里面存放26个字母,取出n个,以m个排列,计算排列的总数! 注意: (1) m<n (2) 里面的元素不能重复排列 (3)"遇零则止" 核心代码如下: ...

  9. C语言全排列

    #include <stdio.h> int m=5; char s[]="12345"; void Swap(char *a, char *b)//元素交换 { ch ...

随机推荐

  1. HDU1061-Rightmost Digit(高速功率模)

    pid=1061">主题链接 题意:求n^n的个位数的值. 思路:高速幂求值 代码: #include <iostream> #include <cstdio> ...

  2. fastjson经常用法

    首先,JSON究竟是什么? JSON就是一串字符串 仅仅只是元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "" 双引號内是属性或值 : 冒号表示后者是前者 ...

  3. UVA - 11324 The Largest Clique 强连通缩点+记忆化dp

    题目要求一个最大的弱联通图. 首先对于原图进行强连通缩点,得到新图,这个新图呈链状,类似树结构. 对新图进行记忆化dp,求一条权值最长的链,每一个点的权值就是当前强连通分量点的个数. /* Tarja ...

  4. 在WIN7笔记本电脑系统的建立WIFI热点

        成功的关键是,你在运行秩序:       前置条件:右键"我的电脑"--"属性"--"设备管理器"--"网络适配器&quo ...

  5. JAVA web四个属性的范围汇总

    首先,你需要知道client跳跃和server差别: client跳转: response.sendRedict(String path),地址栏发生改变. 不能传递request属性. server ...

  6. SpringMVC注释启用

    这篇文章是我学习的网络视频SpringMVC写的过程. 谢谢公布各位前辈的视频 以下评论SpringMVC几个关键步骤,注意事项启用: 首先需要加载配置文件(假设请使用自定义路径) <? xml ...

  7. [LeetCode] 036. Valid Sudoku (Easy) (C++)

    指数:[LeetCode] Leetcode 解决问题的指数 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 036. ...

  8. 如何构建高性能web网站:分布式缓存

    一.数据库前端缓冲区 要清除数据库前缓冲区,首先必须明确什么是文件系统的内核缓冲区(Buffer Area):它位于内核的物理内存地址空间,除了使用O_DIRECT比其他标签中打开文件,所有的磁盘的读 ...

  9. java maven quartz exampe 实用指南

    pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...

  10. .NET中IDisposable接口的基本使用

    首先来看MSDN中关于这个接口的说明: [ComVisible(true)] public interface IDisposable { // Methods void Dispose(); } 1 ...