排列和组合算法 C语言经典实现
来源:互联网 发布:js编辑器下载 编辑:程序博客网 时间:2024/05/21 07:54
排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现。
本人在经过多次摸索和思考之后,总结如下,以供参考。
程序代码如下:
2 #include <stdlib.h>
3
4 char array[] ="abcd";
5
6 #define N 4
7 #define M 3
8 int queue[N] = {0};
9 int top =0;
10 int flag[N] = {0};
11
12 void perm(int s,int n)
13 {
14 int i;
15
16 if (s > n)
17 {
18 return;
19 }
20
21 if (s == n)
22 {
23 for (i =0; i < n; i++)
24 {
25 printf("%c", queue[i]);
26 }
27 printf("\t");
28 return ;
29 }
30
31 for (i =0; i < n; i++)
32 {
33 if (flag[i] ==0)
34 {
35 flag[i] = 1;
36 queue[s] = array[i];
37 perm(s+1, n);
38 flag[i] = 0;
39 }
40 }
41 }
42
43 void comb(int s,int n, int m)
44 {
45 int i;
46
47 if (s > n)
48 return ;
49
50 if (top == m)
51 {
52 for (i =0; i < m; i++)
53 {
54 printf("%c", queue[i]);
55 }
56 printf("\t");
57 return ;
58 }
59
60 queue[top++] = array[s];
61 comb(s+1, n, m);
62 top--;
63 comb(s+1, n, m);
64
65 }
66
67 int main()
68 {
69 printf("\nperm():\n");
70 perm(0, N);
71 printf("\ncombination():\n");
72 comb(0, N, M);
73 printf("\n");
74 return 0;
75 }
运行结果:
perm():
abcd abdc acbd acdb adbc adcb bacd badc bcad bcda
bdac bdca cabd cadb cbad cbda cdab cdba dabc dacb
dbac dbca dcab dcba
combination():
abc abd acd bcd
abcd abdc acbd acdb adbc adcb bacd badc bcad bcda
bdac bdca cabd cadb cbad cbda cdab cdba dabc dacb
dbac dbca dcab dcba
combination():
abc abd acd bcd
- 排列和组合算法 C语言经典实现
- 排列和组合算法 C语言经典实现
- C语言实现排列/组合算法
- c 语言实现全排列和组合
- 排列和组合的非递归算法的C语言实现
- 排列和组合的非递归算法的C语言实现
- 全排列和组合算法的C#语言实现
- C语言实现数学上的组合和排列
- 字符串排列、组合(C语言实现)
- C语言实现全排列(部分算法参考网友,可实现重复字符的组合)
- 全排列和组合的实现算法
- 全排列和组合的实现算法
- 经典递归算法之排列,组合,集合和换零钱, Python yield实现.
- 排列和组合算法
- 数组全排列算法实现和组合算法实现
- 排列算法的C语言实现
- C语言实现全排列算法
- C语言实现的全排列算法
- Java 线程池的原理与实现
- WML相关资源
- oogle:中国开发者通过移动广告可年收入上千万
- 将SQL查询结果以字符串形式返回
- linux 下 firefox install flash player
- 排列和组合算法 C语言经典实现
- 内存映射文件
- 【经验分享】Javascript几个小技巧。
- lamp 的安装
- 详细讲解MySQL数据库中Show命令的用法
- 深入研究Servlet线程安全性问题
- 三大UML建模工具Visio、Rational Rose、PowerDesign的区别
- Visual Assist X 10.6.1837完美破解版(带VS2010破解)
- 搜索&爬虫