1. 程式人生 > >全排列解析【遞迴方法】

全排列解析【遞迴方法】

定義

         從n個元素中取出m個元素進行排列,當n=m時這個排列被稱為全排列。

遞迴法

          我們要對前n個數進行全排列,那麼首先我們可以發現第一位數可以是1~n中的任意一位,列舉第一位數的n種可能,然後我們就可以再去求剩下n-1位,確定第二位後再遞迴剩下的n-2位,一直遞迴即可求解。

步驟

1.首先列舉全排列第一個位置的元素,即讓其分別為1,2,3……n。

2.接著開始列舉第二個位置的元素,一直遞迴,直到最後一個元素。

3.記得還原陣列,否則陣列的值會被改變,影響後面排列。

4.如果找到一個排列,就輸出。

程式碼

#include<cstdio>
#include <iostream>
using namespace std;
void perm(int *a,int p,int q)   //其中初始時p指向陣列頭元素的下標,q指向尾部元素的下標
{
    if(p==q)                    //說明已經找到一個排列,輸出他們
    {
        for(int i=0;i<=q;++i)
            printf("%d ",a[i]);
        printf("\n");
    }
    else
    {
        for(int i=p;i<=q;++i)    //列舉字首
        {
            swap(a[i],a[p]);     //交換值,即字首的值
            perm(a,p+1,q);
            swap(a[i],a[p]);     //陣列還原
        }
    }
}

int main()
{
    int a[4]={1,2,3,4};
    perm(a,0,3);
    return 0;
}

結果

備註:如果還有疑問或者想了解更多請戳連結看視訊講解點選開啟連結