输入n个数,按照字典序从小到大的顺序输出前n个数的所有排列。
核心代码:
void print_permutation(int n, int*a,int cur)
{
int i,j;
if(cur==n) //当存入的数组a的数量到达n时,这时候就可以输出
{
for(i = 0 ; i < n; i++)
printf("%d \t",a[i]);
printf("\n");
}
else
{
for(i = 1; i <= n; i++) //循环变量i是考察当前a[cur],检查i是否在之前被用过
{
int ok=1;
for(j = 0; j < cur ;j++ )//检查cur之前的几位,看是否有与cur相同的项。
if(a[j]==i) ok=0;
if(ok)
{
a[cur] = i; //如果i没有出现在cur之前的几位,那么将cur插入到数组中
print_permutation(n,a,cur+1);//递归调用
}
}
}
}
运行结果:
please input a number
3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
请按任意键继续. . .