用回溯法实现的字典序全排列
#include <stdio.h>
#include <string.h>
#define MAX 1000
int a[MAX];
void fun(int a[],int m,int n) //m为已经储存的数字个数
{
int i,j;
if(m==n+1) //若已取哇完n个数,则输出
{
for(i=1;i<=n;i++)
printf("%d ",a[i]);
putchar('\n');
}
else
{
for(i=1;i<=n;i++)
{
int k=1;
for(j=1;j<m;j++)// i是否被取出
{
if(a[j]==i)
k=0;
}
if(k) //若未被取过,则取出,放入数组a【】中,
{
a[m]=i;
fun(a,m+1,n);
}
}
}
}
int main()
{
int n;
while(scanf("%d",&n))
{
memset(a,MAX,sizeof(int));
fun(a,1,n); //数组a【】,从数字1开始排列
}
return 0;
}