c++语言全排列数的生成
使用递归方式生成全排列,代码见下图和文本。
全排列函数要求输入数组的元素类型为整型数,实际中需要对复杂元素生成全排列时,可以将数组下标作为全排列对象,使用排列后的下标顺序索引复杂元素实现任意类型的全排列。
全排列函数代码:
程序主函数代码:
#include <stdio.h>
void swap(int *A, int a, int b)
{
int temp = A[a];
A[a] = A[b];
A[b] = temp;
}
void fullpermutation(int *A, int n, int k)
{
int i;
if (k == n-1)
{
for (i = 0; i < n; i++)
printf(" %d" + !i, A[i]);
printf("\n");
}
else
{
for (i = k; i < n; i++)
{
swap(A, i, k);
fullpermutation(A, n, k+1);
swap(A, i, k);
}
}
}
int main()
{
int n;
printf("Length of array: ");
scanf("%d", &n);
int arr[n], i;
printf("Array elements: ");
for (i = 0; i < n; i++)
scanf("%d", arr + i);
fullpermutation(arr, n, 0);
return 0;
}
由于全排列复杂度为阶乘模型,因此数组元素很多时输出结果过长,回答不上传五个及以上的数组运行结果,题主和读者可自行验证。