38#include <gtest/gtest.h>
59 for (Grafo::Node_Iterator it(g); it.has_curr(); it.next_ne()) {
60 auto n = it.get_curr();
61 if (n->get_info() ==
src_val) src = n;
62 if (n->get_info() ==
tgt_val) tgt = n;
66 g.insert_arc(src, tgt, weight);
75 auto n0 = g.insert_node(0);
76 auto n1 = g.insert_node(1);
77 auto n2 = g.insert_node(2);
88 const auto& dist =
floyd.get_dist_mat();
90 const long i0 =
floyd.index_node(n0);
91 const long i1 =
floyd.index_node(n1);
92 const long i2 =
floyd.index_node(n2);
113 auto n0 = g.insert_node(0);
114 auto n1 = g.insert_node(1);
119 const auto& dist =
floyd.get_dist_mat();
120 const int Inf = numeric_limits<int>::max();
122 const long i0 =
floyd.index_node(n0);
123 const long i1 =
floyd.index_node(n1);
138 auto n0 = g.insert_node(0);
139 auto n1 = g.insert_node(1);
140 auto n2 = g.insert_node(2);
143 g.insert_arc(n0, n1, -1);
144 g.insert_arc(n1, n2, 2);
145 g.insert_arc(n0, n2, 3);
152 long i0 =
floyd.index_node(n0);
153 long i1 =
floyd.index_node(n1);
154 long i2 =
floyd.index_node(n2);
156 const auto& dist =
floyd.get_dist_mat();
199 for (
size_t i = 0; i <
nodes.size(); ++i) {
200 auto node =
floyd.select_node(i);
225 const long n = g.get_num_nodes();
236 auto n0 = g.insert_node(0);
237 auto n1 = g.insert_node(1);
238 auto n2 = g.insert_node(2);
240 g.insert_arc(n0, n1, 1);
241 g.insert_arc(n1, n2, 2);
242 g.insert_arc(n0, n2, 5);
247 long i0 =
floyd.index_node(n0);
248 long i2 =
floyd.index_node(n2);
269 auto path =
floyd.get_min_path(0
L, 0
L);
300 const auto& path_mat =
floyd.get_path_mat();
301 const auto& dist =
floyd.get_dist_mat();
302 const int Inf = numeric_limits<int>::max();
303 const long n = g.get_num_nodes();
309 for (
long i = 0; i < n; ++i) {
310 for (
long j = 0; j < n; ++j) {
311 if (dist(i, j) == Inf) {
317 long k = path_mat(i, j);
331 for (
int i = 0; i <
N; ++i)
332 nodes.push_back(g.insert_node(i));
335 for (
int i = 0; i <
N; ++i)
336 for (
int j = 0; j <
N; ++j)
344 const auto& dist =
floyd.get_dist_mat();
347 for (
int i = 0; i <
N; ++i)
351 for (
int i = 0; i <
N; ++i)
352 for (
int j = 0; j <
N; ++j)
355 EXPECT_LT(dist(i, j), numeric_limits<double>::max());
369 const auto& dist =
floyd.get_dist_mat();
375 auto path =
floyd.get_min_path(0
L, 0
L);
377 EXPECT_EQ(path.get_first_node()->get_info(), 42);
Floyd-Warshall algorithm for all-pairs shortest paths.
Generic directed graph (digraph) wrapper template.
typename BaseGraph::Arc Arc
typename BaseGraph::Node Node
Compute the all-pairs shortest path distance matrix and the path reconstruction matrix for a graph g ...
constexpr bool is_empty() const noexcept
Return true if list is empty.
DynArray< Graph::Node * > nodes
Main namespace for Aleph-w library functions.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Arc of graph implemented with double-linked adjacency lists.
Utility algorithms and operations for graphs.