遞迴演算法實現全排列

2021-07-10 21:41:25 字數 691 閱讀 7813

輸入乙個字串,列印出該字串中字元的所有排列。

例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串

程式如下:

#include using namespace std;

void swap(char &a,char &b)

void permutation(char *str,int k,int m)

若以a、b、c為例,函式的第乙個(最外層)for迴圈:陣列裡的每乙個數(a、b、c)分別與第乙個數a交換(a與a交換,a與b,a與c)

然後對每一種情況展開此一層的for迴圈:從交換後的陣列第二個數開始後面的數分別同第二個數進行交換

然後再從第三個數開始……

直到陣列最後,列印出每一種情況下的排序

遞迴的出口,就是只剩乙個字元的時候,遞迴的迴圈過程,就是從每個子串的第二個字元開始依次與第乙個字元交換,然後繼續處理子串。

對abc來說遞迴流程圖:

第乙個(最外層的for迴圈)i=012時,分別對應的陣列是abc,bac,cba

在i=0時內套的次迴圈是對abc的處理,次迴圈i=01時分別對應abc,acb,再次迴圈時k==m,輸出排序陣列,恢復陣列返回上一級迴圈

全排列演算法遞迴實現

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

全排列遞迴演算法 C 實現

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

全排列演算法的遞迴實現

a b c d 的全排列為 1 a後面跟 b c d 的全排列 2 b後面跟 a c d 的全排列 3 c後面跟 a b d 的全排列 4 d後面跟 a b c 的全排列 而對1中的 b c d 照樣可以按照上面的形式進行分解。public static void main stringargs p...