排列算法的C语言实现

回溯法实现:

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 #include
2 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

你可能感兴趣的:(c,算法,语言)