STL中的全排列函式實現全排列

2021-10-09 22:23:43 字數 851 閱讀 3419

標頭檔案:#inlcude
這裡先說兩個概念:「下乙個排列組合」和「上乙個排列組合」,對序列 ,每乙個元素都比後面的小,按照字典序列,固定a之後,a比bc都小,c比b大,它的下乙個序列即為,而的上乙個序列即為,同理可以推出所有的六個序列為:、、、、、,其中沒有上乙個元素,沒有下乙個元素。

a.函式模板:next_permutation(arr, arr+size);

b.引數說明:

arr: 陣列名

size:陣列元素個數

c.函式功能: 返回值為bool型別,當當前序列不存在下乙個排列時,函式返回false,否則返回true,排列好的數在陣列中儲存

d.注意:在使用前需要對欲排列陣列按公升序排序,否則只能找出該序列之後的全排列數。

比如,如果陣列num初始化為2,3,1,那麼輸出就變為了:

a.函式模板:prev_permutation(arr, arr+size);

b.引數說明:

arr: 陣列名

size:陣列元素個數

c.函式功能: 返回值為bool型別,當當前序列不存在上乙個排列時,函式返回false,否則返回true

d.注意:在使用前需要對欲排列陣列按降序排序,否則只能找出該序列之後的全排列數。

例如 求n個數的全排列

#include

using

namespace std;

intmain()

while

(next_permutation

(a+1

,a+1

+n))

;return0;

}

[參考資料]

STL 全排列問題

擅長排列的小明 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述小明十分聰明,而且十分擅長排列計算。比如給小明乙個數字5,他能立刻給出1 5按字典序的全排列,如果你想為難他,在這5個數字中選出幾個數字讓他繼續全排列,那麼你就錯了,他同樣的很擅長。現在需要你寫乙個程式來驗證擅長排...

輸出全排列(C 全排列函式)

請編寫程式輸出前n個正整數的全排列 n 10 並通過9個測試用例 即n從1到9 觀察n逐步增大時程式的執行時間。輸入格式 輸入給出正整數n 10 輸出格式 輸出1到n的全排列。每種排列佔一行,數字間無空格。排列的輸出順序為字典序,即序列a 1,a2,an 排在序列b1,b2,bn之前,如果存在k使得...

STL函式之全排列next permutation

牛牛的作業薄上有乙個長度為 n 的排列 a,這個排列包含了從1到n的n個數,但是因為一些原因,其中有一些位置 不超過 10 個 看不清了,但是牛牛記得這個數列順序對的數量是 k,順序對是指滿足 i j 且 a i a j 的對數,請幫助牛牛計算出,符合這個要求的合法排列的數目。每個輸入包含乙個測試用...