6#include <gtest/gtest.h>
39 std::vector<Node*>
nodes;
40 for (
size_t i = 0; i < n; ++i)
43 for (
size_t i = 0; i < n - 1; ++i)
52 std::vector<Node*>
nodes;
53 for (
size_t i = 0; i < n; ++i)
56 for (
size_t i = 0; i < n; ++i)
57 for (
size_t j = i + 1; j < n; ++j)
70 auto nodes = create_linear_graph(5);
84 auto n = g.insert_node(0);
96 auto n1 = g.insert_node(1);
97 auto n2 = g.insert_node(2);
98 auto n3 = g.insert_node(3);
100 g.insert_arc(n1, n2);
116 auto nodes = create_complete_graph(10);
129 auto nodes = create_linear_graph(10);
134 auto path =
finder(g,
nodes[0], [](
Node* p) {
return p->get_info() == 7; });
141 const auto nodes = create_linear_graph(5);
147 const auto path =
finder(g,
nodes[0], [](
Node* p) {
return p->get_info() == 100; });
161 auto nodes = create_linear_graph(5);
174 auto n = g.insert_node(0);
178 auto path =
finder(g, n, n);
187 auto n1 = g.insert_node(1);
188 auto n2 = g.insert_node(2);
189 auto n3 = g.insert_node(3);
191 g.insert_arc(n1, n2);
212 auto n1 = g.insert_node(1);
213 auto n2 = g.insert_node(2);
214 auto n3 = g.insert_node(3);
215 auto n4 = g.insert_node(4);
217 g.insert_arc(n1, n2);
218 g.insert_arc(n1, n3);
219 g.insert_arc(n2, n4);
220 g.insert_arc(n3, n4);
223 auto path =
finder(g, n1, n4);
231 auto nodes = create_complete_graph(8);
241 auto nodes = create_linear_graph(10);
245 auto path =
finder(g,
nodes[0], [](
Node* p) {
return p->get_info() == 5; });
259 auto n1 = dg.insert_node(1);
260 auto n2 = dg.insert_node(2);
261 auto n3 = dg.insert_node(3);
263 dg.insert_arc(n1, n2);
264 dg.insert_arc(n2, n3);
267 auto path =
finder.dfs(n1, n3);
278 auto n1 = dg.insert_node(1);
279 auto n2 = dg.insert_node(2);
280 auto n3 = dg.insert_node(3);
282 dg.insert_arc(n1, n2);
283 dg.insert_arc(n2, n3);
286 auto path =
finder.bfs(n1, n3);
296 auto n1 = dg.insert_node(1);
297 auto n2 = dg.insert_node(2);
298 auto n3 = dg.insert_node(3);
300 dg.insert_arc(n1, n2);
301 dg.insert_arc(n3, n2);
304 auto path =
finder.dfs(n1, n3);
314 auto n1 = dg.insert_node(1);
315 auto n2 = dg.insert_node(2);
316 auto n3 = dg.insert_node(3);
318 dg.insert_arc(n1, n2);
319 dg.insert_arc(n2, n3);
322 auto path =
finder.dfs(n1, [](
DGT::Node* p) {
return p->get_info() == 3; });
333 auto nodes = create_linear_graph(1000);
344 auto nodes = create_complete_graph(50);
359 auto n = g.insert_node(1);
362 auto path =
finder(g, n, n);
369 auto n1 = g.insert_node(1);
370 auto n2 = g.insert_node(2);
371 g.insert_arc(n1, n2);
374 auto path =
finder(g, n1, n2);
382 auto n1 = g.insert_node(1);
383 auto n2 = g.insert_node(2);
387 auto path =
finder(g, n1, n2);
398 auto n1 = g.insert_node(1);
399 auto n2 = g.insert_node(2);
400 auto n3 = g.insert_node(3);
402 g.insert_arc(n1, n2);
403 g.insert_arc(n2, n3);
404 g.insert_arc(n3, n1);
407 auto path =
finder(g, n1, n3);
421 auto n1 = g.insert_node(1);
422 auto n2 = g.insert_node(2);
423 auto n3 = g.insert_node(3);
424 auto n4 = g.insert_node(4);
426 g.insert_arc(n1, n2);
427 g.insert_arc(n1, n3);
428 g.insert_arc(n2, n4);
429 g.insert_arc(n3, n4);
432 auto path =
finder(g, n1, n4);
WeightedDigraph::Node Node
Generic directed graph (digraph) wrapper template.
typename BaseGraph::Node Node
Búsqueda de caminos sobre grafos dirigidos definidos mediante una clase grafo (no digrafo).
Busca en amplitud un camino entre un par de nodos.
Busca en profundidad un camino entre un par de nodos.
constexpr bool is_empty() const noexcept
Return true if list is empty.
size_t size() const noexcept
Count the number of elements of the list.
virtual Node * insert_node(Node *node) noexcept
Insertion of a node already allocated.
Graph_Node< int > Node
The graph type.
Graph_Arc< int > Arc
The node class type.
Arc * insert_arc(Node *src_node, Node *tgt_node, void *a)
size_t size() const noexcept
Return the path length in nodes.
bool is_empty() const noexcept
Return true if the path is empty.
std::vector< Node * > create_linear_graph(size_t n)
std::vector< Node * > create_complete_graph(size_t n)
List_Graph< Graph_Node< int >, Graph_Arc< int > > GT
TEST_F(FindPathTest, DFS_SimplePath)
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.
Path finding algorithms in graphs.
Generic graph and digraph implementations.