全排列與子集演算法

2021-10-04 09:46:04 字數 1199 閱讀 6074

一、

全排列演算法是一種經典的遞迴演算法。例如集合的全排列為共3!種。

遞迴法求解的思路是先固定第乙個元素,求剩下的全排列,求剩下的全拍列時,固定剩餘元素中的第乙個元素,再求剩下元素的全排列,直到就剩乙個元素停止。

例如求集合的全排列。

1、固定元素1求元素的全排列

(1)、固定元素2求的全排列

1)、固定元素3 ,得到乙個排列方式(1,2,3,4)

2)、固定元素4,得到一種排列方式(1,2,4,3)

(2)、固定元素3、求的全排列

1)、固定元素2,得到乙個排列方式(1,3,2,4)

2)、固定元素4,得到一種排列方式(1,3,4,2)

(3)、固定元素4求的全排列

1)、固定元素2,得到乙個排列方式(1,4,2,3)

2)、固定元素3,得到一種排列方式(1,4,3,2)

經過上述步驟即可得到以1為第乙個元素的全排列,再分別將2,3,4固定為第一元素重複上面過程即可得到的全排列

**如下:

#includeusing namespace std;

void swap(int &a,int &b)//交換函式

void perm(int *br,int k,int m)//遞迴函式

{ if(k ==m)

{ for(int i = 0; i <= m; ++i)

{ cout<

結果:

二、子集排列(遞迴)

下標全置為0,左孩子為1,右孩子為0,若下標為1,表示輸出該位置的值,為0不輸出。

{cout結果:

全排列 全排列ii 子集 子集ii

2 全排列ii 3 子集 4 子集ii 5 資料排列 解題步驟 首先,要通過讀題完成下面三個步驟 1 描述解的形式,定義乙個解空間,它包含問題的所有解。2 構造狀態空間樹。3 構造約束函式 用於殺死節點 標準回溯模板 回溯演算法,複雜度較高,因為回溯演算法就是暴力窮舉,遍歷整顆決策樹是不可避免的 r...

求子集 全排列

求子集 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 思路 1 確定乙個tags標記陣列,用於確定某個元素是否被選擇 2 確定遞迴的終止條件為 確定元素是...

子集和全排列問題

列出所有子集 採用列出2進製數的方法 問題描述 列出給定集合的所有子集合,包括空子集。思路 乙個集合的所有子集合的個數是 11111 01111 1 11111 10000 當這個數加1時,如果當前位是1,那麼當前位就變成0並且向前進1位 接著前一位如果是1,也會變成0並且繼續進製 以此類推,直到遇...