1 #ifndef AI_TOOLBOX_FACTORED_APSP_HEADER_FILE
2 #define AI_TOOLBOX_FACTORED_APSP_HEADER_FILE
8 template <
typename Factor>
27 template <
typename Factor>
35 std::vector<size_t> distances(A);
36 std::vector<size_t> front;
41 for (
size_t a = 0; a < A; ++a) {
42 std::fill(std::begin(distances), std::end(distances), 0);
48 for (
size_t i = 0; i < front.size(); ++i) {
49 const auto a2 = front[i];
50 const auto d = (distances[a2] == A) ? 0 : distances[a2];
52 for (
auto n : adjacencyList[a2]) {
53 if (distances[n] == 0) {
61 retval = std::max(retval, *std::max_element(std::begin(distances), std::end(distances)));
78 template <
typename Factor>
82 std::vector<std::vector<size_t>> adjacencyList;
83 adjacencyList.resize(A);
85 for (
const auto & f : graph) {
86 const auto & tag = f.getVariables();
88 adjacencyList[a].insert(std::end(adjacencyList[a]), std::begin(tag), std::end(tag));
91 for (
size_t a = 0; a < A; ++a) {
92 auto & al = adjacencyList[a];
93 auto begin = std::begin(al), end = std::end(al);
95 std::sort(begin, end);
96 end = std::unique(begin, end);
97 end = std::remove(begin, end, a);
98 al.erase(end, std::end(al));
101 return adjacencyList;