全排列演算法遞迴實現(Permutations)

2021-08-08 00:00:30 字數 736 閱讀 7380

全排列(permutations),對輸入的字元排列出所有可能的組合。例如,輸入「123」,輸出:

123

132

213

231

321

312

輸入乙個字元,直接輸出就好;輸入兩個字元,輪流先輸出其中乙個字元再輸出另乙個;輸入三個字元,輪流輸出其中兩個字元再輸出另外乙個字元;……

由此可以發現,當n > 1時,我們輸入n個字元的時候,可以輪流輸出其中n-1個字元再輸出剩下的那個字元,也就是n個字元的全排列是建立在n-1個字元全排列的基礎上。

輸入字元數

輸入的字元

輸出的情況11

1(直接輸出)

21,2

+ 1/2

31,2,3

+ 1/2/3

41,2,3,4

+ 1/2/3/4

顯然,選擇遞迴實現是最省心實惠的好辦法。

void swap(char *a, char *b) 

void permutation(char *a, int first, int

last)

putchar('\n');

}else

}}

#include 

void test()

int main()

本文參考自部落格:全排列演算法及實現

遞迴演算法實現全排列

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串 程式如下 include using namespace std void swap char a,char b void permutation char str,int k,int m ...

全排列演算法遞迴實現

前言 在一些演算法題當中有時需要進行全排列,是乙個比較簡單的遞迴呼叫,在這裡記錄下,以後可以直接拿來使用。過程 例如 第一步 和的全排列組合 和的全排列組合 和的全排列組合 第二步 針對這個集合在拆分為 和的全排列組合 和的全排列組合 之後就是模擬如此。集合中每個元素和剩下元素的全排列的組合。在對這...

全排列遞迴演算法 C 實現

遞迴解決問題的方法就是將乙個大問題不斷分解成小問題,直到小問題很容易解決為止 先看全排列怎麼分解成小問題 假設要全排列 abc 先把a作為前部不變,全排列bc,同樣將b作為前部,全排列c,顯然是它本身 於是大問題變成了很容易解決的小問題了 如圖所示 如下 全排列演算法 遞迴實現 author rog...