aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkaiwu <kaiwu2004@gmail.com>2023-01-13 15:38:02 +0800
committerkaiwu <kaiwu2004@gmail.com>2023-01-13 15:38:02 +0800
commit5b4403c08297c5742a7cef0434902f390be505f1 (patch)
treebe10b9ee00e04829daf6de109782ca69732d8245
parentfb7d36801a0b4d12a7337ff06afaeabcc0180d5f (diff)
downloadadvent-of-code-5b4403c08297c5742a7cef0434902f390be505f1.tar.gz
advent-of-code-5b4403c08297c5742a7cef0434902f390be505f1.zip
2022 day19 part1 dfs
-rw-r--r--src/2022/day19/aoc.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/2022/day19/aoc.cpp b/src/2022/day19/aoc.cpp
index f5ea6a1..7124873 100644
--- a/src/2022/day19/aoc.cpp
+++ b/src/2022/day19/aoc.cpp
@@ -62,22 +62,30 @@ void build_product(build_result& r, int x) {
}
}
-int to_build(const blueprint& b, const build_result& r) {
- int i = 3;
- return i;
+std::vector<int> to_build(const blueprint& b, const build_result& r) {
+ std::vector<int> xs;
+ for (int i = 3; i >= 0; i--) {
+ if (can_build(i, r, b)) {
+ xs.push_back(i);
+ }
+ }
+ xs.push_back(INT32_MAX);
+ return xs;
}
void build(int m, const blueprint& b, build_result r, build_result& max) {
if (m > 0) {
// print_result(b.idx, 24 - m, r);
- int i = to_build(b, r);
- if (i != INT32_MAX) {
- auto r0 = build_robot(i, r, b);
- build_product(r0, i);
- build(m - 1, b, r0, max);
- } else {
- build_product(r, 5);
- build(m - 1, b, r, max);
+ auto is = to_build(b, r);
+ for (int i : is) {
+ if (i != INT32_MAX) {
+ auto r0 = build_robot(i, r, b);
+ build_product(r0, i);
+ build(m - 1, b, r0, max);
+ } else {
+ build_product(r, 5);
+ build(m - 1, b, r, max);
+ }
}
} else {
if (max < r) {