回溯法实现:
1 #include
2 char data[] = {'a', 'b', 'c', 'd'};
3 int data_len = sizeof(data)/sizeof(data[0]);
4 int used[256] = {0};
5 char disp_array[256];
6
7 void print()
8 {
9 int i;
10
11 for (i = 0; i < data_len; i++)
12 {
13 printf("%c", disp_array[i]);
14 }
15 printf("\n");
16 }
17 int perm(int pos)
18 {
19 int i;
20 if (pos >= data_len)
21 {
22 print();
23 }
24 for (i = 0; i < data_len; i++)
25 {
26 if (!used[i])
27 {
28 used[i] = 1;
29 disp_array[pos] = data[i];
30 perm(pos+1);
31 used[i] = 0;
32 }
33 }
34 return 0;
35 }
36
37 int main()
38 {
39 perm(0);
40 return 0;
41 }
其它方法:
1 #include2 char data[] = { 'a', 'b', 'c', 'd'};
3 int data_len = sizeof(data)/ sizeof(data[ 0]);
4
5 void print( char *data)
6 {
7 int i;
8
9 for (i = 0; i < data_len; i++)
10 {
11 printf( " %c ", data[i]);
12 }
13 printf( " \n ");
14 }
15 void swap( char *p1, char *p2)
16 {
17 char tmp = *p1;
18 *p1 = *p2;
19 *p2 = tmp;
20 }
21 int perm( int pos)
22 {
23 int i;
24 if (pos >= data_len)
25 {
26 print(data);
27 }
28 for (i = pos; i < data_len; i++)
29 {
30 swap(&data[pos], &data[i]);
31 perm(pos+ 1);
32 swap(&data[pos], &data[i]);
33 }
34 return 0;
35 }
36 int main()
37 {
38 perm( 0);
39 return 0;
40 }
41
没有评论:
发表评论