全排列算法(使用递归)

问题描述

   对于任意的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;

}

运行结果

猜你喜欢

转载自www.cnblogs.com/zmy1/p/10075990.html