Upload README draft

This commit is contained in:
stefiosif
2022-10-11 15:50:22 +03:00
parent 70c7e2998c
commit 285109277b

View File

@@ -0,0 +1,70 @@
# Dynamic Reachability Algorithms
The goal of this project is to implement a collection of dynamic
reachability algorithms covered in "Improved Dynamic Reachability
Algorithms for Directed Graphs" by Liam Roditty and Uri Zwick.
## Usage/Examples
```cpp
#include "roditty_zwick.h"
int main() {
// Initialize a graph G
graph::Digraph<int> G(
{1, {2}},
{2, {3, 4}},
{3, {1, 5, 9}},
{4, {5, 6}},
{5, {6, 7}},
{6, {8}},
{7, {8, 9}},
{8, {9}},
{9, {5}}
);
// Initialize dynamic reachability algorithm for general graphs
algo::HenzingerKing<int> hk(G);
hk.init();
// Query
std::cout << "Path from 4 to 8 exists: " << dr.query(4, 8);
std::vector<std::pair<int, int>> edges(
{4, 6}, {5, 6}, {3, 1}
);
// Remove edges
for (const auto& [u, v] : edges)
dk.remove(u, v);
std::cout << "Path from 4 to 8 exists: " << dr.query(4, 8);
// Insert edges
for (const auto& [u, v] : edges)
dk.insert(u, v);
std::cout << "Path from 4 to 8 exists: " << dr.query(4, 8);
return 0;
}
```
## Run Locally
Clone the repository with submodules (doctest/nanobench):
```bash
git clone --recurse-submodules https://github.com/stefiosif/dynamic-reachability-algorithms
```
Run with CMake:
``` bash
> mkdir build && cd build
> cmake ..
> make
> ./main
```
## References
* [Improved Dynamic Reachability Algorithms for Directed Graphs](www.google.com)