Add solution for "Day 16: Reindeer Maze", part 2
This commit is contained in:
@@ -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);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user