递归方法求全排列
#include<stdio.h>
#include<algorithm>
using namespace std;
//每次两两交换,到最后一个位置时输出
void perm(int a[],int begin,int end)
{
if(begin == end) //
{
for(int i=1;i<=end;i++)
printf("%d ",a[i]);
printf("\n");
}else{
//begin前面的固定下来,求begin后面的序列的全排列,递归到后面的序列只剩一个元素为止
for(int i=begin;i<=end;i++)
{
swap(a[i],a[begin]);
perm(a,begin+1,end);
swap(a[i],a[begin]);
}
}
}
int main()
{
int n,a[6];
printf("输入小于6的数:\n");
scanf("%d",&n);
if(n<6){
for(int i=1;i<=n;i++) a[i] = i;
perm(a,1,n);
}
return 0;
}