#include<stdio.h>
#include<string.h>
void swap(int *a, int *b) ;
int a(int k,int n, int num[]);
int main()
{
int n,num[1000];//创建数组,储存数列
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
a(1,n,num);//调用递归
return 0;
}
int a(int k,int n, int num[])
{
if(k==n)
{
for(int i=1;i<=n;i++)
printf("%2d",num[i]);
printf("\n");
return 0;
}
for(int i=k;i<=n;i++) //先固定数列的第一个,然后调换数字,使选中的数为第一个数,然后递归
{
swap(&num[k], &num[i]);
a(k+1,n,num); //同样道理全排列长度为n-1的数列
swap(&num[k], &num[i]);//还原数列,,进行下一个
}
}
void swap(int *a, int *b) //利用指针交换两个数
{
int m;
m = *a;
*a = *b;
*b = m;
}