코딩테스트
[c++] 조합, 순열, 중복조합, 중복순열 (DFS)
goliot
2024. 8. 16. 19:23
반응형
정보 출처
https://yabmoons.tistory.com/99
조합
int arr[5];
bool selected[5];
void dfs(int idx, int cnt) {
if(cnt == 3) {
for(int i=0; i<5; i++) {
if(selected[i]) {
cout << arr[i] << ' ';
}
}
cout << endl;
}
else {
for(int i=idx, i<5; i++) {
if(selected[i]) continue;
selectes[i] = true;
dfs(i, cnt+1);
selected[i] = false;
}
}
}
순열
int arr[5];
bool selected[5];
vector<int> v;
void dfs(int cnt) {
if(cnt == 3) { // 3개를 뽑는다면
for(int i=0; i<5; i++) {
cout << v[i] << ' ';
}
cout << endl;
}
else {
for(int i=0, i<5; i++) {
if(selected[i]) continue;
selected[i] = true;
v.push_back(arr[i]);
dfs(cnt+1);
v.pop_back();
selected[i] = false;
}
}
}
중복조합
int arr[5];
int selected[5];
void dfs(int idx, int cnt) {
if(cnt == 3) {
for(int i=0; i<3; i++) {
cout << selected[i] << ' ';
}
cout << endl;
}
else {
for(int i=idx; i<5; i++) {
selected[cnt] = arr[i];
dfs(i, cnt+1);
}
}
}
중복순열
int arr[5];
int selected[5];
void dfs(int cnt) {
if(cnt == 3) {
for(int i=0; i<3; i++) {
cout << selected[i] << ' ';
}
cout << endl;
}
else {
for(int i=0; i<5; i++) {
selected[cnt] = arr[i];
dfs(cnt+1);
}
}
}
반응형