현재 상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘
- 현재 수열을 사전 순으로 생각했을 떄의 다음 수열로 만들고 true를 리턴하는 함수
- 만약 현재의 수열이 사전 순으로 생각했을 때 제일 마지막이여서 다음 수열이 존재하지 않는다면 false를 리턴
형태 : next_permutation(배열에서 순열로 만들고자 하는 구역의 시작점, 배열에서 순열로 만들고자 하는 구역의 끝점)
ex) next_permutation(arr, arr+3);
next_permutation( vector1.begin( ), vector1.end( ) )
예시 - 1,2,3을 가지고 만들 수 있는 순열구하기
int a[3] = {1,2,3,4};
do{
for(int i=0; i<4; i++){
cout << a[i];
cout << '\n';
}while(next_permutation(a, a+4));
벡터로도 수열 만들 수 있음
vector<int> v(4);
for(int i=0; i<4; i++){
v[i] = i+1;
}
do{
for(int i=0; i<4; i++){
cout << v[i] << " ";
}
}while(next_permtation(v.begin(), v.end());
// 실행결과
// 1 2 3 4
// 1 2 4 3
// ...
// 4 2 3 1
// 4 3 1 2
// 4 3 2 1
예시 - 1,2,3,4 에서 숫자 2개를 순서없이 뽑는 모든 경우(조합 구하기)
int a[4] = {0, 0, 1, 1};
do{
for(int i=0; i<4; i++){
if(a[i] == 0)
cout << i+1;
}
cout << '\n';
}while(next_permutation(a,a+4));