Add solution for "Day 16: Reindeer Maze", part 2

This commit is contained in:
2025-05-14 21:16:14 +02:00
parent 897bab12bf
commit 26dfb379a2
4 changed files with 139 additions and 22 deletions

View File

@@ -16,6 +16,8 @@
#pragma once
#include <list>
#include <map>
#include <set>
#include <vector>
#include <aoc/common/WeightedEdgeGraph.hpp>
@@ -32,15 +34,22 @@ class ReindeerMaze
virtual const int getPuzzleDay() const override;
virtual void finish() override;
private:
typedef std::map<int, std::pair<int, int>> VertexAttachedPositions;
static constexpr char getStartChar();
static constexpr char getEndChar();
static constexpr char getWallChar();
static constexpr int getTurnCost();
void buildPathSegmentGraph(WeightedEdgeGraph& graph, const int entry, const int exit);
void buildPathSegmentGraph(WeightedEdgeGraph& graph, VertexAttachedPositions& vertexAttachedPositions,
const int entry, const int exit);
void initializeWorkList(std::list<ReindeerMazeCrossing>& crossings, const int entryVertex);
void addCheckedIncidence(std::vector<ReindeerMazePathIncidence>& incidences, const Point2 start,
const Point2 direction);
Point2 findStart() const;
void AddPathSegmentEdges(WeightedEdgeGraph& graph, const ReindeerMazePathIncidence& pathIncidence,
void addPathSegmentEdges(WeightedEdgeGraph& graph, const ReindeerMazePathIncidence& pathIncidence,
const std::vector<ReindeerMazePathIncidence>& otherPathIncidences);
std::pair<int, int> makePositionsIdPair(const Point2& position1, const Point2& position2);
int calcShortestPaths(const WeightedEdgeGraph& graph, const VertexAttachedPositions& vertexAttachedPositions,
const int entry, const int exit, const std::vector<int>& shortestDistances);
int getNUniqueAttachedPositions(const VertexAttachedPositions& vertexAttachedPositions,
const std::set<int>& vertices);
};