1. 程式人生 > >全排列演算法(使用遞迴)

全排列演算法(使用遞迴)

問題描述

   對於任意的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;

}

執行結果