#include <iostream>
using namespace std;
int time=0;
void permutation(char *p, const int k, const int m)
{
if (k == m)
{
++time;
cout << time<<"\t" << ":\t";
for (int i = 0; i <= m; ++i)
{
cout << p[i];
}
cout << endl;
}
else
{
for (int i = k; i <= m; ++i)
{
swap(p[k], p[i]);
permutation(p, k + 1, m);
swap(p[k], p[i]);
}
}
}
int main()
{
char s[] = "abcde";
permutation(s,0,4);
system("pause");
return 0;
}
A(5,5)=120
permutation函数里首先:
-a开头的,后面跟着bc的所有排列
permutation(p,1,2)本来就是a开头的,不用改变
-b开头的,后面跟着ac的所有排列
本来是a开头的,变成b开头要swap一次
swap(p[0],p[1])
permutation(p, 1,2)
再把他变回去
swap(p[0],p[1])
-c开头的,后面跟着ab的所有排列
把ac进行交换
swap(p[0],p[1])
permutation(p,1,2)
swap(p[0],p[1])