全排列算法(使用递归)
问题描述
对于任意的n个字母,实现其的全排列,并查询第m个,其排列形式。我写的这个代码中主要用的递归。
代码如下
#include<stdio.h>
int n,book[10],k; //全局变量默认初始化为0
char a[10],b[100][10];
void dfs(int step)
{
int i;
if(step==n+1)
{
for(i=1;i<=n;i++)
{
printf("%c",a[i]);
b[k][i-1]=a[i];
}
printf("\n");
k++;
return; //若没有该return将成死循环
}
for(i=1;i<=n;i++)
{
if(book[i]==0)
{
a[step]=i+96;
book[i]=1; //变为1标记为现序列中已有该字母
dfs(step+1);
book[i]=0; //将刚才尝试的字母收回,进行下一次尝试
}
}
return;
}
int main()
{
int m;
scanf("%d%d",&n,&m);
dfs(1);
printf("排好序的第%d个是:\n",m);
puts(b[m-1]);
return 0;
}
运行结果