next permutation/prev permutation関数の使い方
10400 ワード
関数の概要
アルゴリズムヘッダファイルを
next置換関数
1-2-3-4配列があり、シーケンスを取得したい場合はnext permutationの関数を使用して、配列の値が次のシーケンス1-2-4-3になり、関数はtrueを返します.
// 첫번째 인자가 구하고자 하는 순열의 시작, 두번째 인자가 순열의 끝
bool next_permutation (BidirectionalIterator first, BidirectionalIterator last);
// 아래처럼 직접 비교함수를 넣어줘도 됩니다.
bool next_permutation (BidirectionalIterator first, BidirectionalIterator last, Compare comp);
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
// 1부터 4까지 저장할 벡터 선언 (배열도 가능!)
vector<int> v(4);
// 1부터 4까지 벡터에 저장
for(int i=0; i<4; i++){
v[i] = i+1;
}
// next_permutation을 통해서 다음 순열 구하기
do{
for(int i=0; i<4; i++){
cout << v[i] << " ";
}
cout << '\n';
}while(next_permutation(v.begin(),v.end()));
return 0;
}
実装結果
1 2 3 4
1 2 4 3
1 3 2 4
...
4 2 3 1
4 3 1 2
4 3 2 1
prev置換関数
4-3-2-1配列があり、シーケンスを要求したい場合はprev permutationの関数を使用します.配列の値は次のシーケンス4-3-1-2になり、関数はtrueを返します.
// 첫번째 인자가 구하고자 하는 순열의 시작, 두번째 인자가 순열의 끝
bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last);
// 아래처럼 직접 비교함수를 넣어줘도 됩니다.
bool prev_permutation (BidirectionalIterator first, BidirectionalIterator last, Compare comp);
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
// 1부터 4까지 저장할 벡터 선언 (배열도 가능!)
vector<int> v(4);
// 4부터 1까지 벡터에 저장
for(int i=0; i<4; i++){
v[i] = 4-i;
}
// prev_permutation을 통해서 이전 순열 구하기
do{
for(int i=0; i<4; i++){
cout << v[i] << " ";
}
cout << '\n';
}while(prev_permutation(v.begin(),v.end()));
return 0;
}
実装結果
4 3 2 1
4 3 1 2
4 2 3 1
...
1 3 2 4
1 2 4 3
1 2 3 4
Reference
この問題について(next permutation/prev permutation関数の使い方), 我々は、より多くの情報をここで見つけました https://velog.io/@98jihyun/nextpermutation-prevpermutation-함수-사용법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol