queue
This commit is contained in:
12
2019/15.cpp
12
2019/15.cpp
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
14
2019/20.cpp
14
2019/20.cpp
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user