排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现。
本人在经过多次摸索和思考之后,总结如下,以供参考。
程序代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include <stdio.h> #include <stdlib.h> char array[] = "abcd" ; #define N 4 #define M 3 int queue[N] = {0}; int top = 0; int flag[N] = {0}; void perm( int s, int n) { int i; if (s > n) { return ; } if (s == n) { for (i = 0; i < n; i++) { printf ( "%c" , queue[i]); } printf ( "\t" ); return ; } for (i = 0; i < n; i++) { if (flag[i] == 0) { flag[i] = 1; queue[s] = array[i]; perm(s+1, n); flag[i] = 0; } } } void comb( int s, int n, int m) { int i; if (s > n) return ; if (top == m) { for (i = 0; i < m; i++) { printf ( "%c" , queue[i]); } printf ( "\t" ); return ; } queue[top++] = array[s]; comb(s+1, n, m); top--; comb(s+1, n, m); } int main() { printf ( "\nperm():\n" ); perm(0, N); printf ( "\ncombination():\n" ); comb(0, N, M); printf ( "\n" ); return 0; } |
运行结果:
1
2
3
4
5
6
|
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 |
以上就是小编为大家带来的排列和组合算法的实现方法_C语言经典案例的全部内容了,希望对大家有所帮助,多多支持服务器之家~