全排列演算法(使用遞迴)
問題描述
對於任意的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;
}
執行結果