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);
89 bool found =
finder(g, n, n, path);
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);
106 bool found =
finder(g, n1, n3, path);
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);
197 bool found =
finder(g, n1, n3, path);
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
Path search on directed graphs defined through a graph class (not a digraph).
Performs a breadth-first search for a path between a pair of nodes.
Performs a depth-first search for a path between a pair of nodes.
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
size_t blossom_maximum_cardinality_matching(const GT &g, DynDlist< typename GT::Arc * > &matching, SA sa=SA())
Alias of compute_maximum_cardinality_general_matching().
Main namespace for Aleph-w library functions.
Arc of graph implemented with double-linked adjacency lists.
Path finding algorithms in graphs.
Generic graph and digraph implementations.