MCPcopy Create free account
hub / github.com/cp-algorithms/cp-algorithms / main

Function main

test/test_strongly_connected_components.cpp:6–65  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4#include "strongly_connected_components.h"
5
6int main() {
7 // we only have a single test case for now
8 int n = 10;
9 vector<vector<int>> adj(n);
10 adj[0].push_back(1);
11 adj[0].push_back(7);
12 adj[1].push_back(1);
13 adj[1].push_back(2);
14 adj[2].push_back(1);
15 adj[2].push_back(5);
16 adj[3].push_back(2);
17 adj[3].push_back(4);
18 adj[4].push_back(9);
19 adj[5].push_back(3);
20 adj[5].push_back(6);
21 adj[5].push_back(9);
22 adj[6].push_back(2);
23 adj[7].push_back(0);
24 adj[7].push_back(6);
25 adj[7].push_back(8);
26 adj[8].push_back(6);
27 adj[8].push_back(9);
28 adj[9].push_back(4);
29
30 vector<vector<int>> components, adj_scc;
31 strongly_connected_components(adj, components, adj_scc);
32
33 auto sorted_components = components;
34 for (vector<int> &a : sorted_components)
35 sort(a.begin(), a.end());
36 sort(sorted_components.begin(), sorted_components.end(),
37 [](auto &l, auto &r) { return l[0] < r[0]; });
38
39 vector<int> root(n);
40 for (auto &comp : components) {
41 for (auto v : comp) {
42 root[v] = *comp.begin();
43 }
44 }
45
46 vector<int> minimal_element(n);
47 for (auto &comp : components) {
48 minimal_element[*comp.begin()] = *min_element(comp.begin(), comp.end());
49 }
50
51 for (vector<int> &a : adj_scc)
52 sort(a.begin(), a.end(), [minimal_element](auto &l, auto &r) { return minimal_element[l] < minimal_element[r]; });
53
54 assert(sorted_components.size() == 4);
55 assert(sorted_components[0] == std::vector<int>({0, 7}));
56 assert(sorted_components[1] == std::vector<int>({1, 2, 3, 5, 6}));
57 assert(sorted_components[2] == std::vector<int>({4, 9}));
58 assert(sorted_components[3] == std::vector<int>({8}));
59
60 assert(adj_scc[root[0]] == std::vector<int>({root[1], root[1], root[8]}));
61 assert(adj_scc[root[1]] == std::vector<int>({root[4], root[4]}));
62 assert(adj_scc[root[8]] == std::vector<int>({root[1], root[4]}));
63

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected