全排列解析【遞迴方法】
阿新 • • 發佈:2018-12-13
定義
從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; }
結果
備註:如果還有疑問或者想了解更多請戳連結看視訊講解點選開啟連結