6#include <gtest/gtest.h>
60 auto n1 = g.insert_node(1);
61 auto n2 = g.insert_node(2);
81 auto n1 = g.insert_node(1);
82 auto n2 = g.insert_node(2);
83 auto n3 = g.insert_node(3);
84 auto n4 = g.insert_node(4);
102 auto n1 = g.insert_node(1);
103 auto n2 = g.insert_node(2);
104 g.insert_arc(n1, n2);
107 auto n3 = g.insert_node(3);
108 auto n4 = g.insert_node(4);
109 g.insert_arc(n3, n4);
119 auto n1 = g.insert_node(1);
120 auto n2 = g.insert_node(2);
121 g.insert_arc(n1, n2);
124 auto n3 = g.insert_node(3);
125 auto n4 = g.insert_node(4);
126 g.insert_arc(n3, n4);
129 auto n5 = g.insert_node(5);
130 auto n6 = g.insert_node(6);
131 g.insert_arc(n5, n6);
140 auto n1 = g.insert_node(1);
141 auto n2 = g.insert_node(2);
144 g.insert_arc(n1, n2);
159 std::vector<Node*>
nodes;
161 for (
size_t i = 0; i < n; ++i)
162 nodes.push_back(g.insert_node(i));
165 for (
size_t i = 0; i < n; ++i)
166 for (
size_t j = i + 1; j < n; ++j)
177 std::vector<Node*>
nodes;
179 for (
size_t i = 0; i < n; ++i)
180 nodes.push_back(g.insert_node(i));
183 for (
size_t i = 0; i < n; ++i)
193 auto root = g.insert_node(0);
196 std::vector<Node*> current_level = {
root};
199 for (
int depth = 0; depth < 4; ++depth)
203 for (
auto parent : current_level)
205 auto left = g.insert_node(node_count++);
206 auto right = g.insert_node(node_count++);
208 g.insert_arc(parent, left);
209 g.insert_arc(parent, right);
225 auto center = g.insert_node(0);
227 for (
int i = 1; i <= 20; ++i)
229 auto leaf = g.insert_node(i);
230 g.insert_arc(center,
leaf);
247 for (
size_t i = 0; i < n; ++i)
251 std::vector<Node*>
nodes;
253 nodes.push_back(it.get_curr());
255 for (
size_t i = 0; i < n - 2; ++i)
267 std::vector<Node*>
nodes;
269 for (
size_t i = 0; i < n; ++i)
270 nodes.push_back(g.insert_node(i));
273 for (
size_t i = 0; i < n - 1; ++i)
284 std::vector<Node*>
nodes;
286 for (
size_t i = 0; i < n; ++i)
287 nodes.push_back(g.insert_node(i));
290 for (
size_t i = 0; i < n; ++i)
304 const size_t rows = 5;
305 const size_t cols = 5;
306 std::vector<std::vector<Node*>>
grid(rows, std::vector<Node*>(cols));
309 for (
size_t i = 0; i < rows; ++i)
310 for (
size_t j = 0; j < cols; ++j)
311 grid[i][j] = g.insert_node(i * cols + j);
314 for (
size_t i = 0; i < rows; ++i)
315 for (
size_t j = 0; j < cols - 1; ++j)
316 g.insert_arc(
grid[i][j],
grid[i][j + 1]);
319 for (
size_t i = 0; i < rows - 1; ++i)
320 for (
size_t j = 0; j < cols; ++j)
321 g.insert_arc(
grid[i][j],
grid[i + 1][j]);
330 auto n1 = g.insert_node(1);
331 auto n2 = g.insert_node(2);
332 auto n3 = g.insert_node(3);
333 auto n4 = g.insert_node(4);
337 g.insert_arc(n1, n2);
338 g.insert_arc(n1, n3);
339 g.insert_arc(n2, n4);
340 g.insert_arc(n3, n4);
350 auto n1 = g.insert_node(1);
351 auto n2 = g.insert_node(2);
352 auto n3 = g.insert_node(3);
353 auto n4 = g.insert_node(4);
354 auto n5 = g.insert_node(5);
355 auto n6 = g.insert_node(6);
358 g.insert_arc(n1, n2);
359 g.insert_arc(n2, n3);
360 g.insert_arc(n3, n1);
363 g.insert_arc(n3, n4);
366 g.insert_arc(n4, n5);
367 g.insert_arc(n5, n6);
368 g.insert_arc(n6, n4);
381 const size_t n = 500;
382 std::vector<Node*>
nodes;
384 for (
size_t i = 0; i < n; ++i)
385 nodes.push_back(g.insert_node(i));
388 for (
size_t i = 0; i < n - 1; ++i)
398 const size_t n = 500;
399 std::vector<Node*>
nodes;
401 for (
size_t i = 0; i < n; ++i)
402 nodes.push_back(g.insert_node(i));
405 for (
size_t i = 0; i < n - 2; ++i)
419 auto n1 = g.insert_node(1);
420 auto n2 = g.insert_node(2);
421 g.insert_arc(n1, n2);
432 auto n1 = g.insert_node(1);
433 auto n2 = g.insert_node(2);
439 g.insert_arc(n1, n2);
451 std::vector<Node*>
nodes;
453 for (
size_t i = 0; i < n; ++i)
454 nodes.push_back(g.insert_node(i));
456 for (
size_t i = 0; i < n - 1; ++i)
466 auto center = g.insert_node(0);
468 std::vector<Node*>
rim;
470 for (
size_t i = 0; i < n; ++i)
471 rim.push_back(g.insert_node(i + 1));
474 for (
auto node :
rim)
475 g.insert_arc(center, node);
478 for (
size_t i = 0; i < n; ++i)
479 g.insert_arc(
rim[i],
rim[(i + 1) % n]);
495 for (
size_t i = 0; i <
k1_size; ++i)
496 k1_nodes.push_back(g.insert_node(i));
498 for (
size_t i = 0; i <
k1_size; ++i)
499 for (
size_t j = i + 1; j <
k1_size; ++j)
503 for (
size_t i = 0; i <
k2_size; ++i)
506 for (
size_t i = 0; i <
k2_size; ++i)
507 for (
size_t j = i + 1; j <
k2_size; ++j)
524 auto n1 = g.insert_node(1);
525 auto n2 = g.insert_node(2);
526 auto n3 = g.insert_node(3);
528 g.insert_arc(n1, n2);
529 g.insert_arc(n2, n3);
WeightedDigraph::Node Node
void next()
Advances the iterator to the next filtered element.
Graph_Node< int > Node
The graph type.
Graph_Arc< int > Arc
The node class type.
Filtered iterator on the nodes of a graph.
Determines if a graph g is connected.
__gmp_expr< T, __gmp_binary_expr< __gmp_expr< T, U >, unsigned long int, __gmp_root_function > > root(const __gmp_expr< T, U > &expr, unsigned long int l)
DynArray< Graph::Node * > nodes
Main namespace for Aleph-w library functions.
Container2< typename Container1::Item_Type > filter(Container1 &container, Operation &operation)
Filter elements that satisfy operation.
DynList< T > maps(const C &c, Op op)
Classic map operation.
Default filter for filtered iterators on arcs.
Arc of graph implemented with double-linked adjacency lists.
TEST_F(TestConnectivityTest, EmptyGraphIsConnected)
List_Graph< Graph_Node< int >, Graph_Arc< int > > GT
Generic graph and digraph implementations.
Graph connectivity testing.