C STL實現全排列

2021-09-12 00:25:31 字數 1169 閱讀 9699

next_permutation函式

組合數學中經常用到排列,這裡介紹乙個計算序列全排列的函式:next_permutation(start,end),和prev_permutation(start,end)。這兩個函式作用是一樣的,區別就在於前者求的是當前排列的下乙個排列,後乙個求的是當前排列的上乙個排列。至於這裡的「前乙個」和「後乙個」,我們可以把它理解為序列的字典序的前後,嚴格來講,就是對於當前序列pn,他的下乙個序列pn+1滿足:不存在另外的序列pm,使pn

對於next_permutation函式,其函式原型為:

#include

bool next_permutation(iterator start,iterator end)

當當前序列不存在下乙個排列時,函式返回false,否則返回true

我們來看下面這個例子:

#include

#include

using

namespace

std;

intmain

() ;do

while(next_permutation(num,num+

3));

return

0;

}

輸出結果為:

當我們把while(next_permutation(num,num+3))中的3改為2時,輸出就變為了:

由此可以看出,next_permutation(num,num+n)函式是對陣列num中的前n個元素進行全排列,同時並改變num陣列的值。

另外,需要強調的是,next_permutation()在使用前需要對欲排列陣列按公升序排序,否則只能找出該序列之後的全排列數。比如,如果陣列num初始化為2,3,1,那麼輸出就變為了:

此外,next_permutation(node,node+n,cmp)可以對結構體num按照自定義的排序方式cmp進行排序。

C STL全排列的簡單實現

next permutation函式 組合數學中經常用到排列,這裡介紹乙個計算序列全排列的函式 next permutation start,end 和prev permutation start,end 這兩個函式作用是一樣的,區別就在於前者求的是當前排列的下乙個排列,後乙個求的是當前排列的上乙個...

全排列實現

參考的是 演算法競賽入門 p185 方法是用乙個額外的陣列a,不斷放入物件到這個陣列中,直到n個為止。include using namespace std int total 0 void permutation char s,char a,int n,int cur total cout end...

C STL程式 全排列,刪除 插入元素。

寫兩個stl程式,並對他們進行分析設計,結果如下 1.include include include using namespace std int main vectorvec a,a 6 建立vector vector size type i cout 遞增陣列 for i 0 i includ...