2.2.1 부분집합 생성하기
vector <int > subset;
void search(int k){
if(k == n+1){
//부분집합을 구한 상태임.
}
else{
//k를 부분집합에 포함시킨다.
subset.push_back(k);
search(k+1);
subset.pop_back();
//k를 부분집합에 포함시키지 않는다.
search(k+1);
}
}
2.2.2 순열 생성하기
vector <int> permutation;
bool chosen[n+1];
void search(){
if(permutation.size() == n){
//순열을 만든 상태임
}
else{
for(int i = 1; i <= n; i ++){
if(chosen[i]) continue;
chosen[i] = true;
permutation.push_back(i);
search();
chosen[i] = false;
permutation.pop_back(i);
}
}
}
C++ 표준 라이브러리 next_permutation사용하기
for(int i = 1; i <=n; i ++){
permutation.push_back(i);
}
do{
//
}while(next_permutation(permutation.begin(), permutation.end());
'정보올림피아드-KOI > 알고리즘 트레이닝' 카테고리의 다른 글
[이코테] 곱하기 혹은 더하기 (0) | 2020.12.14 |
---|---|
[이코테] 1이 될때까지 (0) | 2020.12.14 |
힙 정렬 - Heap sort (0) | 2020.04.08 |
Priority_Queue 사용법 (0) | 2020.04.08 |
2장. 프로그래밍 기법 (2.1 언어적 특성) (0) | 2020.03.22 |