graph-algorithms-rs 0.1.10

A collection of graph algorithms.
Documentation
# Graph Algorithms

A collection of graph algorithms implemented in Rust. This repository aims to provide efficient and easy-to-understand implementations of various graph algorithms for educational purposes and practical use. 

Contributions are welcome to expand the set of algorithms and improve existing implementations.

## Reference implementation

[![test](https://github.com/slavik-pastushenko/graph-algorithms-rs/actions/workflows/test.yml/badge.svg)](https://github.com/slavik-pastushenko/graph-algorithms-rs/actions/workflows/test.yml)
[![release](https://github.com/slavik-pastushenko/graph-algorithms-rs/actions/workflows/release.yml/badge.svg?event=workflow_dispatch)](https://github.com/slavik-pastushenko/graph-algorithms-rs/actions/workflows/release.yml)
[![docs](https://docs.rs/graph-algorithms-rs/badge.svg)](https://docs.rs/graph-algorithms-rs)
[![crate](https://img.shields.io/crates/v/graph-algorithms-rs.svg)](https://crates.io/crates/graph-algorithms-rs)
![downloads](https://img.shields.io/crates/d/graph-algorithms-rs)
[![codecov](https://codecov.io/gh/slavik-pastushenko/graph-algorithms-rs/graph/badge.svg?token=9EL0F6725A)](https://codecov.io/gh/slavik-pastushenko/graph-algorithms-rs)
[![License](https://img.shields.io/github/license/slavik-pastushenko/graph-algorithms-rs)](https://github.com/slavik-pastushenko/graph-algorithms-rs/blob/main/LICENSE)

| Algorithm       | Description       | Example       |
|-----------------|-------------------|---------------|
| Dijkstra's      | Finds the shortest path from a starting node to all other nodes in a weighted graph. It uses a priority queue to efficiently select the next node with the smallest distance. | ![Dijkstra's]https://upload.wikimedia.org/wikipedia/commons/5/57/Dijkstra_Animation.gif |
| Bellman-Ford    | Computes shortest paths from a single source vertex to all of the other vertices in a weighted digraph. It can handle graphs with negative weight edges. | ![Bellman-Ford]https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Bellman%E2%80%93Ford_algorithm_example.gif/440px-Bellman%E2%80%93Ford_algorithm_example.gif |
| Floyd-Warshall  | Finds shortest paths between all pairs of vertices in a weighted graph. It can handle graphs with negative weights but no negative weight cycles. | ![Floyd-Warshall]https://upload.wikimedia.org/wikipedia/commons/0/0f/Floyd_warshall_gif.gif |

#### A* Algorithm (TODO)
A* is a pathfinding and graph traversal algorithm that is often used in many fields of computer science due to its completeness, optimality, and optimal efficiency.

#### Breadth-First Search (BFS) (TODO)
BFS explores the graph level by level, starting from a given node. It is used for finding the shortest path in an unweighted graph.

#### Depth-First Search (DFS) (TODO)
DFS explores as far as possible along each branch before backtracking. It is used for pathfinding and topological sorting.

## Safety

This crate uses `#![forbid(unsafe_code)]` to ensure everything is implemented in 100% safe Rust.

## Usage

The `examples` directory contains example implementations of various graph algorithms:

```rust
use graph_algorithms::{DijkstraAlgorithm, GraphAlgorithm};
```

## Features

This crate provides optional features for different algorithms.

By default, all features are enabled. You can customize the features when adding the dependency in your `Cargo.toml`:

```toml
[dependencies]
graph-algorithms-rs = { version = "x.x.x", default-features = false, features = ["dijkstra"] }
```

For a detailed list of available algorithms, refer to the [Reference implementation](#reference-implementation) section.

## Contributing

Build the application:

```bash
cargo build
```

Test the application:

```bash
cargo test
```

Run [clippy](https://github.com/rust-lang/rust-rsppy):

```bash
cargo clippy --all-targets --all-features --no-deps -- -D warnings
```

Run [lint](https://github.com/rust-lang/rustfmt):

```bash
cargo fmt
```

Generate documentation in HTML format:

```bash
cargo doc --open
```