关于排列组合问题
输入几个数,要求输出它们的所有排列可能,请问算法如何设计?
#include"stdio.h"
#include"stdlib.h"
#define N 5
int x[N];
int fun(int a[],int n)
{
int i,j,k,*b;
if(n==1)
{
x[N-1]=a[0];
for(i=0;i<N;i++) /*打印已记录的数,即是已排好的数*/
printf("%d ",x[i]);
printf("\n");
return 0;
}
b=(int *)malloc((n-1)*sizeof(int));
for(i=0;i<n;i++)
{
x[N-n]=a[i]; /*记录递归前的数值*/
for(k=0,j=0;k<n;k++)
if(k!=i)
b[j++]=a[k]; /*剔除已记录的数*/
fun(b,n-1); /*将剩下的数递归*/
}
}
main()
{
int c[N]={1,2,3,4,5};
fun(c,N);
getchar();
}