38#include <gtest/gtest.h>
74 auto n0 = g.insert_node(0);
75 g.insert_arc(n0, n0, 1);
85 auto n0 = g.insert_node(0);
86 auto n1 = g.insert_node(1);
87 g.insert_arc(n0, n1, 1);
112 auto n0 = g.insert_node(0);
113 auto n1 = g.insert_node(1);
114 auto n2 = g.insert_node(2);
115 auto n3 = g.insert_node(3);
117 g.insert_arc(n0, n1, 1);
118 g.insert_arc(n1, n2, 1);
119 g.insert_arc(n2, n3, 1);
134 auto n0 = g.insert_node(0);
135 auto n1 = g.insert_node(1);
136 auto n2 = g.insert_node(2);
138 g.insert_arc(n0, n1, 1);
139 g.insert_arc(n1, n2, 1);
140 g.insert_arc(n2, n0, 1);
144 for (
long i = 0; i < 3; ++i)
145 for (
long j = 0; j < 3; ++j)
152 auto n0 = g.insert_node(0);
153 auto n1 = g.insert_node(1);
154 auto n2 = g.insert_node(2);
155 auto n3 = g.insert_node(3);
157 g.insert_arc(n0, n1, 1);
158 g.insert_arc(n0, n2, 1);
159 g.insert_arc(n0, n3, 1);
160 g.insert_arc(n1, n2, 1);
161 g.insert_arc(n1, n3, 1);
162 g.insert_arc(n2, n3, 1);
166 for (
long i = 0; i < 4; ++i)
167 for (
long j = 0; j < 4; ++j)
174 auto n0 = g.insert_node(0);
175 auto n1 = g.insert_node(1);
176 auto n2 = g.insert_node(2);
177 auto n3 = g.insert_node(3);
179 g.insert_arc(n0, n1, 1);
180 g.insert_arc(n2, n3, 1);
203 auto n0 = g.insert_node(0);
204 auto n1 = g.insert_node(1);
205 auto n2 = g.insert_node(2);
206 auto n3 = g.insert_node(3);
208 g.insert_arc(n0, n1, 1);
209 g.insert_arc(n0, n2, 1);
210 g.insert_arc(n1, n3, 1);
211 g.insert_arc(n2, n3, 1);
224 constexpr int N = 50;
225 std::vector<TestGraph::Node *>
nodes;
227 for (
int i = 0; i <
N; ++i)
228 nodes.push_back(g.insert_node(i));
230 for (
int i = 0; i <
N - 1; ++i)
235 EXPECT_EQ(mat.get_num_nodes(),
static_cast<size_t>(
N));
242 auto n0 = g.insert_node(0);
243 auto n1 = g.insert_node(1);
244 auto n2 = g.insert_node(2);
246 g.insert_arc(n0, n1, 1);
247 g.insert_arc(n1, n2, 1);
258 auto n0 = g.insert_node(0);
259 auto n1 = g.insert_node(1);
260 auto n2 = g.insert_node(2);
262 g.insert_arc(n0, n1, 1);
263 g.insert_arc(n1, n2, 1);
271 for (
size_t i = 0; i <
mat1.get_num_nodes(); ++i)
272 for (
size_t j = 0; j <
mat1.get_num_nodes(); ++j)
274 mat2(
static_cast<long>(i),
static_cast<long>(j)));
279 auto center = g.insert_node(0);
280 std::vector<TestGraph::Node *>
leaves;
282 for (
int i = 1; i <= 5; ++i)
284 auto leaf = g.insert_node(i);
286 g.insert_arc(center,
leaf, 1);
291 for (
long i = 1; i <= 5; ++i)
294 for (
long i = 1; i <= 5; ++i)
297 for (
long j = 1; j <= 5; ++j)
305 ::testing::InitGoogleTest(&
argc,
argv);
Bit matrix for graph connectivity.
Computes the transitive closure of a graph using Warshall's algorithm.
Bit_Mat_Graph< TestGraph > mat
Warshall_Compute_Transitive_Clausure< TestGraph > warshall
DynArray< Graph::Node * > nodes
void warshall_compute_transitive_clausure(GT &g, Bit_Mat_Graph< GT, SA > &mat)
Computes the transitive closure of a graph using Warshall's algorithm.
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.
Generic graph and digraph implementations.
Utility algorithms and operations for graphs.
Warshall's algorithm for transitive closure.
TEST_F(WarshallTest, EmptyGraph)