日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++中的全排列函数next_permutation()

發布時間:2023/12/4 c/c++ 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中的全排列函数next_permutation() 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

全排列函數next_permutation()

prev_permutation函數(按降序排序)

計算序列全排列的函數:next_permutation(start,end),此函數求的是當前排列的下一個排列,這里的“下一個”,我們可以把它理解為序列的字典序的前后

此外,還應該注意的是,next_permutation()在使用前需要對欲排列數組按升序排序,否則只能找出該序列之后的全排列數。
next_permutation函數詳解:

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

對于next_permutation函數,其函數原型為:

#include <algorithm>bool next_permutation(iterator start,iterator end)

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

#include <iostream> #include <algorithm> using namespace std; int main() {int a[3]={1,2,3};while(next_permutation(a,a+3)){cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;}return 0; }


可能你會發現并沒有輸出1 2 3,這就可以用它的概念(性質)來回答了。

如果想要全部輸出,可以考慮用do語句

#include <iostream> #include <algorithm> using namespace std; int main() {int num[3]={1,2,3};do{cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;}while(next_permutation(num,num+3));return 0; }


參考原文全排列函數next_permutation()
prev_permutation函數

#include <iostream> #include <algorithm> using namespace std; int main() {int num[3]={2,1,3};do{cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;}while(prev_permutation(num,num+3));return 0; }

總結

以上是生活随笔為你收集整理的c++中的全排列函数next_permutation()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。