4 #include "../instance/laggraph.hpp"
5 #include "../util/log.hpp"
10 template <
typename visit_func,
typename backtrack_func,
typename traverse_func>
13 using vertex = LagGraph::vertex;
15 DFS(
const LagGraph & graph,
const LagGraph::vertex start, visit_func visit,
16 backtrack_func backtrack, traverse_func traverse,
bool reverse =
false);
20 backtrack_func backtrack;
21 traverse_func traverse;
22 const LagGraph & graph;
24 std::vector<bool> visited;
26 void dfs_rec(vertex v, vertex from,
bool reverse);
29 class TopologicalSort {
31 TopologicalSort(
const LagGraph & graph);
32 std::vector<LagGraph::vertex> get();
35 const LagGraph & graph;
40 class NecessaryOrderComputer {
42 NecessaryOrderComputer(
const Instance & instance);
45 const std::vector<size_t> & get_predecessor_count() const noexcept;
48 const std::vector<
size_t> & get_successor_count() const noexcept;
51 std::vector<
size_t> predecessor_count;
52 std::vector<
size_t> successor_count;
58 std::vector<
unsigned int> earliest_starts;
59 std::vector<
unsigned int> latest_finishs;
62 class CriticalPathComputer {
64 CriticalPathComputer(
const Instance & instance);
65 std::vector<unsigned int> get_forward();
66 std::vector<unsigned int> get_reverse();
75 APLPComputer(
const Instance & instance);
77 std::vector<std::vector<int>> get();
80 std::vector<std::vector<int>> result;
81 std::vector<unsigned int> topological_order;
83 void compute_SSLP(
unsigned int start_job);
88 #include "graphalgos_templates.cpp"