implement bfs multi-target distance calculation to nearest winning state
This commit is contained in:
@ -2,6 +2,7 @@
|
||||
#define __STATE_HPP_
|
||||
|
||||
#include "config.hpp"
|
||||
#include "distance.hpp"
|
||||
#include "physics.hpp"
|
||||
#include "puzzle.hpp"
|
||||
|
||||
@ -15,10 +16,23 @@ public:
|
||||
|
||||
std::vector<State> presets;
|
||||
|
||||
// Some stuff is faster to map from state to mass (e.g. in the renderer)
|
||||
std::unordered_map<State, std::size_t> states;
|
||||
std::unordered_set<State> winning_states;
|
||||
std::unordered_set<State> visited_states;
|
||||
|
||||
// Other stuff maps from mass to state :/
|
||||
std::unordered_map<std::size_t, State> masses;
|
||||
std::vector<std::size_t> winning_path;
|
||||
|
||||
// Fuck it, duplicate the springs too, we don't even need to copy them from
|
||||
// the physics thread then...
|
||||
std::vector<std::pair<std::size_t, std::size_t>> springs;
|
||||
|
||||
// Distance calculation result can be buffered and reused to calculate a new
|
||||
// path on the same graph
|
||||
DistanceResult target_distances;
|
||||
|
||||
int current_preset;
|
||||
State starting_state;
|
||||
State current_state;
|
||||
@ -62,6 +76,10 @@ public:
|
||||
|
||||
auto FindWinningStates() -> void;
|
||||
|
||||
auto FindTargetDistances() -> void;
|
||||
|
||||
auto FindTargetPath() -> void;
|
||||
|
||||
auto CurrentMassIndex() const -> std::size_t;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user