C语言实现全排列

实现全排列,递归实现

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int n=0;
 4
 5 void swap(int *a, int *b)
 6 {
 7      int m;
 8      m=*a;
 9      *a=*b;
10      *b=m;
11 }
12 void perm(int list[], int k, int m)
13 {
14      int i;
15      if(k==m)
16      {
17              for(i=0;i<=m;i++)
18                               printf("%d ",list[i]);
19              printf("\n");
20              n++;
21      }
22      else
23      {
24          for(i=k;i<=m;i++)
25          {
26                           swap(&list[k],&list[i]);
27                           perm(list, k+1, m);
28                           swap(&list[k], &list[i]);
29          }
30      }
31 }
32 int main(void)
33 {
34     int list[]={1,2,3,4,5,6,7};
35     perm(list,0,6);
36     printf("total:%d\n",n);
37     system("pause");
38     return 0;
39 }                  

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

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 void swap(int *a, int *b)
 4 {
 5      int m;
 6      m=*a;
 7      *a=*b;
 8      *b=m;
 9 }
10 void perm(int list[], int len)
11 {
12      int i=0;
13      int k=0;
14      int n=len;
15      int j=1;
16      for(;j<=len;j++)
17      {
18                      if(list[j-1]<list[j])
19                                           i=j;
20      }
21      for(j=1;j<=len;j++)
22      {
23                         if(list[i-1]<list[j])
24                                              k=j;
25      }
26      swap(&list[i-1],&list[k]);
27      for(j=0;j<=i;j++)
28      {
29                       printf("%d ",list[j]);
30      }
31      for(j=len;j>i;j--)
32      {
33                        printf("%d ",list[j]);
34      }
35 }
36 int main(void)
37 {
38     int list[]={7,6,4,1,3,5,2};
39     perm(list,6);
40     system("pause");
41     return 0;
42 }                  

C语言实现全排列

时间: 2024-08-02 19:06:21

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

漫谈 Clustering (2): k-medoids

上一次我们了解了一个最基本的 clustering 办法 k-means ,这次要说的 k-medoids 算法,其实从名字上就可以看出来,和 k-means 肯定是非常相似的.事实也确实如此,k-medoids 可以算是 k-means 的一个变种. k-medoids 和 k-means 不一样的地方在于中心点的选取,在 k-means 中,我们将中心点取为当前 cluster 中所有数据点的平均值: Rough Collie 并且我们已经证明在固定了各个数据点的 assignment 的情

漫谈 Clustering

http://blog.pluskid.org/?p=17 k-means 好久没有写 blog 了,一来是 blog 下线一段时间,而租 DreamHost 的事情又一直没弄好:二来是没有太多时间,天天都跑去实验室.现在主要折腾 Machine Learning 相关的东西,因为很多东西都不懂,所以平时也找一些资料来看.按照我以前的更新速度的话,这么长时间不写 blog 肯定是要被闷坏的,所以我也觉得还是不定期地整理一下自己了解到的东西,放在 blog 上,一来梳理总是有助于加深理解的,二来也

分治法实现1-N的数字按字典序全排列组合 Java语言

package 分治法; import java.util.Arrays; /* * 将数字 1 - n进行全排列 按字典序从小到大输出 * 如 1 - 3 * 123 132 213 231 312 321 */ class GenerateP{ private int n; // 求 1-n所有数字的全排列 private final int maxn = 110;//最多可排列组合的长度 1-100 private boolean [] hashTable; private int []

C语言 全排列

#include<stdio.h> #include<stdlib.h> #include<vector> void swap(int *a,int *b) { int tmp; tmp=*a; *a=*b; *b=tmp; } void permutation(int nums[],int i,int n) { int j=0; if(i==n) { for(j=0;j<n;j++) printf("%d ",nums[j]); printf

1到9的全排列(用深搜 语言c++)

c++代码: #include<bits/stdc++.h>using namespace std;#define fo(i,a,b) for(int i=a;i<=b;i++)bool visit[11];int a[10];void dfs(int index){ ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//使c++输出和c一样快 if(index==10) {  cout<<a[1]<<a[2]&

字符串全排列和组合算法

打印字符串的全排列 算法的思路: 把一个字符串分成两部分,第一个字符+后面部分所有的字符.这样就能够递归的求解整个过程了: 1.每个字符都做一次首字符 2.当某个字符作为首字符的时候,求后面所有字符的全排列 而这里的求后面所有字符的全排列可以看成递归的子问题 全排列的递归树: 但是这里还有一个问题,那就是字符串中有重复的字符时,这样的算法会增加最后的结果数目.比如说字符串aab,a+ab的全排列,然后交换还是a+ab的全排列.所以会增加结果的数目.解决方案就是:当遇到重复的字符的时候就跳过去,不

算法学习(二) 全排列问题的非递归算法——模拟堆栈

前一段时间总结了全排列问题的几种递归解法,今天再总结一下如何通过对系统栈行为的模拟来非递归的实现全排列问题. 我们用一个数组stack[]来表示一个栈,用一个top指针来表示栈顶,用一个flags[]数组来标示每一个数字的可用性:用i来表示当前的状态. 初始状态top=0:i=-1:flags数组全为1: i递增,如果i没有越界并且flags[i]==1,那么就将i写入栈中,栈顶往前移动一位:最后把flags[i]赋值为0,i回溯到初始状态-1: 当栈顶越界,就将整个栈的信息打印出来,然后top

R语言︱ 数据库SQL-R连接与SQL语句执行(RODBC、sqldf包)

数据库是极其重要的R语言数据导入源数据之地,读入包有sqldf.RODBC等.跟SQL server相连有RODBC,跟mySQL链接的有RMySQL.但是在R里面,回传文本会出现截断的情况,这一情况可把我弄得有点手足无措. 一.数据库读入--RODBC包 CRAN 里面的包 RODBC 提供了 ODBC的访问接口: odbcConnect 或 odbcDriverConnect (在Windows图形化界面下,可以通过对话框选择数据库) 可以打开一个连接,返回一个用于随后数据库访问的控制(ha

c语言 深度优先 DFS

1 #include <stdio.h> 2 /* 3 输入一个数n,输出1~n的全排列,有多少种不同的排列? 4 //暴力枚举当然可以,写判断累死.for循环嵌套起来也是累. 5 6 这里运用的是depth first search,DFS 深度优先搜索的思想 7 装作n对应的是n张扑克牌,将其放入n个盒子里有多少种排列方法. 8 */ 9 int a[10],book[10],n;//c语言的全局变量在没有赋值以前默认为0;因此哲理的book数组无需全部再次赋初始值0; 11 void d