思想:
第一个数与后面的数依次进行交换。例如求ABCD全排列。
permutation(A,B,C,D) = A.permutation(B,C,D) + B.permutation(A,C,D) + C.permutation(B,A,D) + D.permutation(B,C,A)
A.permutation(B,C,D) = AB.permutation(C,D) + AC.permutation(B,D) + AD.permutation(C,B)
AB.permutation(C,D) = ABC.D + ABD.C
上述示例给出了输出ABCD与ABDC的过程,根据上述思想,代码如下:
void swap(int *arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
void permutation(int *arr, int begin, int end)
{
if(begin == end)
{
for(int i = 0; i <= end; i++)
cout << arr[i] << " ";
cout << endl;
}
else
{
for(int i = begin; i <= end; i++)
{
swap(arr, i, begin);
permutation(arr, begin+1, end);
swap(arr, i, begin);
}
}
}
int main()
{
int arr[] = {1, 2, 3};
int len =