diff --git a/src/random_example.cc b/src/random_example.cc new file mode 100644 index 0000000..d8d1a43 --- /dev/null +++ b/src/random_example.cc @@ -0,0 +1,43 @@ +#include "roditty_zwick.h" + +#include + +int main() { + graph::Digraph G; + auto gen = std::bind(std::uniform_real_distribution<>(0, 1), + std::default_random_engine()); + + std::vector> dl_set; + std::vector> qr_set; + for (int i = 0; i <= 100; ++i) { + for (int j = 0; j <= 100; ++j) { + auto rand = gen(); + if (rand < 0.5) { + G.insert(i, j); + if (rand < 0.25) + dl_set.push_back({ i, j }); + if (rand < 0.125) + qr_set.push_back({ i, j }); + } + } + } + + // Initialize the Roditty and Zwick's dynamic reachability algorithm + // for general directed graphs inspired by Henzinger and King + algo::HenzingerKing* dr = new algo::HenzingerKing(G); + dr->init(); + + // Remove a random collection of edges from the digraph + dr->remove(dl_set); + + // Answer queries using the maintained transitive closure, if the + // queried edge has been deleted, insert it into the digraph again + for (const auto& q : qr_set) { + if (dr->query(q.first, q.second)) + ; + else + dr->insert(q.first, q.second); + } + + return 0; +} \ No newline at end of file