-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathbacktrack.cpp
More file actions
63 lines (53 loc) · 993 Bytes
/
backtrack.cpp
File metadata and controls
63 lines (53 loc) · 993 Bytes
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#define MAX 1000
#define MAXCANDIDATES 1000
bool finished = false;
bool is_solution(int a[], int k, int n)
{
return k == n;
}
void construct_candidates(int a[], int k, int n, int c[], int *ncandidates)
{
c[0] = true;
c[1] = false;
*ncandidates = 2;
}
void process_solution(int a[], int k)
{
printf("{ ");
for (int i=1; i<=k; i++)
if (a[i] == true)
printf(" %d", i);
printf(" }\n");
}
// input는 총 길이
// a는 solution vector
// k는 현재 진행상태
void backtrack(int a[], int k, int input)
{
int c[MAXCANDIDATES];
int ncandidates;
if (is_solution(a, k, input))
process_solution(a, k);
else
{
k++;
construct_candidates(a, k, input, c, &ncandidates);
for (int i=0; i<ncandidates; i++)
{
a[k] = c[i];
backtrack(a, k, input);
if (finished)
return;
}
}
}
void generate_subsets(int n)
{
int a[MAX];
backtrack(a, 0, n);
}
int main()
{
generate_subsets(4);
}