全排列的兩種實現方式

2021-09-12 04:05:47 字數 972 閱讀 2905

從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m=n時所有的排列情況叫全排列。如果這組數有n個,那麼全排列數為n!個。

假設現在有三個數字:0 1 2,將其全排列結果為:

0 1 2

0 2 1

1 0 2

1 2 0

2 0 1

2 1 0

#include #include using namespace std;

int main ()

; do

while ( prev_permutation(arr,arr+3) );

int arr1 = ;

dowhile ( next_permutation(arr1,arr1+3) );

return 0;

}

說明:prev_permutation是獲取乙個較大字典序排列,其中3為引數,可根據自己的需求更改。

next_permutation 是獲取乙個較大字典序排列,

必要時要對陣列先進行排序(sort)

#include using namespace std;

void print_permutation(int n,int *x,int cur)

cout << endl;

} else

if(ok)

} }

}int main();

print_permutation(3,nums,0);

return 0;

}

說明:

遞迴結束的條件當然是所有的數全部用上了,迴圈變數的i是當前考察的x[cur].為了檢查元素i是否已經被使用過,變數ok作為乙個標記。

不妥之處,請多見諒並賜教。

輸出全排列的兩種方式

輸出全排列的兩種方式 在暴力求解問題中,我們經常會列舉全排列,在此我列了列出了兩種列舉全排列的兩種方式。已輸出1 5的全排列為例。方式1 用回溯演算法 深度優先遍歷dfs author acb0y filename test.cpp create time 2011年9月22日23 00 51 ve...

全排列的兩種遞迴實現

我是懶癌 關於n的全排列即,從1開始至n,n個數的全部排列方式。如 關於3的全排列 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 func 的引數是將要賦值給陣列p的數字,p儲存全排列序列,cnt為陣列下標,hash 0為該數字未出現過,hash 1位該數字已在p中 有點講...

全排列的兩種寫法

對於陣列 1,2,3 他們按照從小到大的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 現在給你乙個正整數n,n小於8,輸出陣列 1,2,n 的從小到大的全排列。由出口遞迴回溯時,至少返回2層,第一次因為if語句,第二次因為不滿足for迴圈條件 include in...