Backtracking method implementation:
1 #include
2CharData[] = {' A ', ' B ', ' C ', ' d '};
3intData_len =sizeof(data)/sizeof(Data[0]);
4intUSED[256] = {0};
5CharDISP_ARRAY[256];
6
7voidPrint ()
8 {
9intI
10
11 for(i = 0; i < Data_len; i++)
12 {
printf ("%c", Disp_array[i]);
14}
printf ("n");
16}
17intPermintPos
18 {
19intI
20if(POS >= Data_len)
21 {
Print ();
23}
24 for(i = 0; i < Data_len; i++)
25 {
26if(!used[i])
27 {
Used[i] = 1;
Disp_array[pos] = Data[i];
Perm (pos+1);
Used[i] = 0;
32}
33}
34 return0;
35}
36
37intMain ()
38 {
Perm (0);
40 return0;
41}
Other methods: 1 #include
2CharData[] = {' A ', ' B ', ' C ', ' d '};
3intData_len =sizeof(data)/sizeof(Data[0]);
4
5voidPrintChar*data)
6 {
7intI
8
9 for(i = 0; i < Data_len; i++)
10 {
printf ("%c", Data[i]);
12}
printf ("n");
14}
15voidSwapChar*P1,Char*P2)
16 {
17CharTMP = *P1;
*P1 = *P2;
*P2 = tmp;
20}
21stintPermintPos
22 {
23intI
24if(POS >= Data_len)
25 {
print (data);
27}
28 for(i = pos; i < Data_len; i++)
29 {
Swap (&data[pos], &data[i]);
Perm (pos+1);
Swap (&data[pos], &data[i]);
33}
34 return0;
35}
36intMain ()
37 {
Perm (0);
39 return0;
40}
41