排列算法的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值