输出数组全排列,c++实现。
思想:长度为n的数组的全排列,相当于选择数组中的每一个数作为开头,再对剩余数进行全排列。
#include<cstdio>
int count = 0;
void myswap(int& a, int& b)
{
int t = a; a = b; b = t;
}
//对数组p下标为m到n-1的元素进行全排列
void perm(int* p, int m, int n)
{
if (m == n - 1)
{
count++;
for (int i = 0; i < n; i++)
printf("%d ", p[i]);
printf("\n");
}
for (int i = m; i < n; i++)
{
if (i == m)//i == m时无需交换p[i]和p[m]的值
perm(p, m + 1, n);
else
{
myswap(p[i], p[m]);
perm(p, m + 1, n);
myswap(p[i], p[m]);
}
}
}
int main()
{
int p[50];
int n = 0;
printf("请输入待排列的数字,空格隔开,回车结束:");
do
{
scanf_s("%d", &p[n++]);
} while (getchar() != '\n');
perm(p, 0, n);
printf("%d个全排列\n", count);
return 0;
}