[Algorithm] Subset(부분집합) 구하기
2023. 3. 12. 18:16ㆍAlgorithm
재귀함수를 이용하여 부분집합을 구하는 방법이다.
#include <vector>
#include <iostream>
using namespace std;
vector<int> subset;
void search(int k, int n) {
vector<int>::iterator it;
if (k == n + 1) {
for (it = subset.begin(); it != subset.end(); it++) {
cout << *it << " ";
}
cout << "\n";
}
else {
subset.push_back(k);
search(k + 1, n);
subset.pop_back();
search(k + 1, n);
return;
}
}
search 함수를 재귀적으로 호출하여 부분집합을 구한다.
search 함수를 재귀 호출하는 분기가 일어나기 전에 push_back과 pop_back을 한번씩 호출하는데
현재 단계인 k를 포함하여 재귀호출할 것인지, 포함하지 않고 재귀호출할 것인지에 따라
부분집합의 결과가 달라진다.
int main() {
search(1, 4);
}
1~4까지의 부분집합을 구해본다.
1 2 3 4
1 2 3
1 2 4
1 2
1 3 4
1 3
1 4
1
2 3 4
2 3
2 4
2
3 4
3
4
'Algorithm' 카테고리의 다른 글
[Algorithm] 체스 퀸 배치 구하기 (0) | 2023.03.12 |
---|---|
[Algorithm] 순열 구하기 (1) | 2023.03.12 |
[TopCoder] InfiniteSequence2(무한 수열) (0) | 2023.03.06 |
[TopCoder] CutSticks (막대들 자르기) (0) | 2023.03.05 |
[TopCoder] NotTwo(2은 아냐) (0) | 2023.03.05 |