#include <iostream>
using namespace std;
void swap(char *p1, char *p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;
}
void permute(char *pStr, char *pStart)
{
char *p = NULL;
static int i = 0;
if('\0' == *pStart)
{
cout << ++i << ":" << pStr << endl;
}
else
{
for(p = pStart; *p != '\0'; p++)
{
swap(pStart, p);
permute(pStr, pStart + 1);
swap(pStart, p);
}
}
}
void printPermute(char *pStr)
{
if(NULL == pStr)
return;
permute(pStr, pStr);
}
int main()
{
char str[] = "abcde";
printPermute(str);
return 0;
}
结果为:
1:abcde
2:abced
3:abdce
4:abdec
5:abedc
6:abecd
7:acbde
8:acbed
9:acdbe
10:acdeb
11:acedb
12:acebd
13:adcbe
14:adceb
15:adbce
16:adbec
17:adebc
18:adecb
19:aecdb
20:aecbd
21:aedcb
22:aedbc
23:aebdc
24:aebcd
25:bacde
26:baced
27:badce
28:badec
29:baedc
30:baecd
31:bcade
32:bcaed
33:bcdae
34:bcdea
35:bceda
36:bcead
37:bdcae
38:bdcea
39:bdace
40:bdaec
41:bdeac
42:bdeca
43:becda
44:becad
45:bedca
46:bedac
47:beadc
48:beacd
49:cbade
50:cbaed
51:cbdae
52:cbdea
53:cbeda
54:cbead
55:cabde
56:cabed
57:cadbe
58:cadeb
59:caedb
60:caebd
61:cdabe
62:cdaeb
63:cdbae
64:cdbea
65:cdeba
66:cdeab
67:ceadb
68:ceabd
69:cedab
70:cedba
71:cebda
72:cebad
73:dbcae
74:dbcea
75:dbace
76:dbaec
77:dbeac
78:dbeca
79:dcbae
80:dcbea
81:dcabe
82:dcaeb
83:dceab
84:dceba
85:dacbe
86:daceb
87:dabce
88:dabec
89:daebc
90:daecb
91:decab
92:decba
93:deacb
94:deabc
95:debac
96:debca
97:ebcda
98:ebcad
99:ebdca
100:ebdac
101:ebadc
102:ebacd
103:ecbda
104:ecbad
105:ecdba
106:ecdab
107:ecadb
108:ecabd
109:edcba
110:edcab
111:edbca
112:edbac
113:edabc
114:edacb
115:eacdb
116:eacbd
117:eadcb
118:eadbc
119:eabdc
120:eabcd