第一种算法:
对于1,2,…,n 这n个数,
1.生成数2,3,…n的所有排列,在每个排列前面加上数字1
2.生成数1,3,…n的所有排列,在每个排列前面加上数字2
3.重复以上过程直到生成1,2,…n-1的所有排列,在每个排列前面加上数字n
代码实现:
void perm1(string str,int len,int m)
{
if (m == len)
cout << str << endl;
else
{
for (int i = m; i < len; i++)
{
char temp = str[m];
str[m] = str[i];
str[i] = temp;
perm1(str, len, m + 1);
}
}
}
第二种算法:
void perm2(string str, int len, char* zero, int m)
{
if (m == len)
cout << zero << endl;
else
{
for (int i = 0; i < len; i++)
{
if (zero[i] == '0')
{
zero[i] = str[m];
perm2(str, len, zero, m + 1);
zero[i] = '0';
}
}
}
}