크기가 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(-1, 6); 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 |