This commit is contained in:
2022-11-27 11:43:10 -08:00
parent 07567e4c8a
commit c8470bb8dc
5 changed files with 19 additions and 34 deletions

View File

@@ -1,5 +1,5 @@
#include <algorithm>
#include <deque>
#include <queue>
#include <iostream>
#include <map>
#include <tuple>
@@ -70,9 +70,11 @@ auto Compute(std::map<Coord, ValueType> world) -> std::pair<int, int> {
int part1 = -1;
int part2 = -1;
for (std::deque<std::pair<int, Coord>> todo {{0,start}};
!todo.empty();
todo.pop_front())
for (
std::queue<std::pair<int, Coord>> todo
{decltype(todo)::container_type{{0,start}}};
!todo.empty();
todo.pop())
{
auto [steps, here] = todo.front();
if (Coord{0,0} == here) part1 = steps;
@@ -81,7 +83,7 @@ auto Compute(std::map<Coord, ValueType> world) -> std::pair<int, int> {
for (auto fn : moves) {
auto next = fn(here);
if (world.erase(next)) {
todo.emplace_back(steps+1, next);
todo.emplace(steps+1, next);
}
}
}

View File

@@ -10,7 +10,7 @@
#include <string>
#include <tuple>
#include <bitset>
#include <deque>
#include <queue>
#include <cctype>
#include <queue>
#include <map>
@@ -56,11 +56,12 @@ auto FindDistancesFrom(
) {
std::map<char, std::pair<std::int64_t, Doors>> result;
std::deque<std::tuple<std::int64_t, Coord, Doors>> todo {{0, start, {}}};
std::queue<std::tuple<std::int64_t, Coord, Doors>> todo;
todo.push({0, start, {}});
std::set<Coord> seen;
for (; !todo.empty(); todo.pop_front()) {
for (; !todo.empty(); todo.pop()) {
auto [steps, here, doors] = todo.front();
// Don't visit the same coordinate twice
@@ -82,7 +83,7 @@ auto FindDistancesFrom(
// Visit all neighbors
for (auto const fn : directions) {
todo.emplace_back(steps+1, fn(here), doors);
todo.emplace(steps+1, fn(here), doors);
}
}

View File

@@ -10,7 +10,7 @@
#include <string>
#include <tuple>
#include <bitset>
#include <deque>
#include <queue>
#include <cctype>
#include <queue>
#include <map>
@@ -64,12 +64,12 @@ auto FindDistancesFrom(
Coord const start
) {
std::vector<std::pair<Name, std::int64_t>> result;
std::deque<std::pair<std::int64_t, Coord>> todo {{0, start}};
std::set<Coord> seen;
for (; !todo.empty(); todo.pop_front()) {
for (
std::queue<std::pair<std::int64_t, Coord>> todo
{decltype(todo)::container_type{{{0, start}}}};
!todo.empty();
todo.pop()) {
auto const [steps, here] = todo.front();
// Don't visit the same coordinate twice
@@ -86,7 +86,7 @@ auto FindDistancesFrom(
// Visit all neighbors
for (auto const fn : directions) {
todo.emplace_back(steps+1, fn(here));
todo.emplace(steps+1, fn(here));
}
}