크기가 k인 숫자의 집합 s가 주어질 때 여기서 6개를 고르는 경우를 모두 출력하면 된다.


s가 오름차순으로 주어지므로 따로 정렬 할 필요없이 i번째를 선택하면 다음 dfs에서는 i+1부터 선택하게 하는 식으로 dfs를 돌리다가


cnt==0가 되면 check배열을 확인하여 check되어있는 것만 출력한다. 6개 고르는거라 그냥 6중 for문을 돌려도 상관없다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <queue>
using namespace std;
 
int k, a[14];
bool c[14];
 
void dfs(int x, int cnt) {
    if (!cnt) {
        for (int i = 0; i < k; i++if (c[i]) printf("%d ", a[i]);
        printf("\n");
        return;
    }
    for (int i = x + 1; i < k - cnt + 1; i++) {
        c[i] = 1;
        dfs(i, cnt - 1);
        c[i] = 0;
    }
}
 
int main() {
    while (1) {
        scanf("%d"&k);
        if (!k) return 0;
        for (int i = 0; i < k; i++scanf("%d"&a[i]);
        dfs(-16);
        printf("\n");
    }
    return 0;
}
 
 
cs


'BOJ' 카테고리의 다른 글

1574 룩 어택  (0) 2017.09.04
10026 적록색약  (0) 2017.09.01
2644 촌수계산  (0) 2017.09.01
2778 측량사 지윤  (0) 2017.09.01
2917 늑대 사냥꾼  (1) 2017.08.31

+ Recent posts