wolf-graph 0.1.0

Data structures and algorithms for working with graphs with reference or value semantics.
Documentation
# wolf-graph

By Wolf McNally

[MIT License](LICENSE.md)

## Status

A work in progress 🚧\
Slender stem with fragile buds 🌱\
Use at your own risk 🤷🏽‍♂️

## Introduction

The `wolf-graph` crate provides data structures and algorithms for working with graphs in Rust. It allows representing and manipulating various types of graphs including general graphs, directed acyclic graphs (DAGs), trees, and compound graphs. Graphs can be manipulated with reference semantics or value semantics.

## Main Features

- Define graphs with generic node, edge and graph data associated with each element
- Supports directed and undirected graphs
- Provides mutable and immutable graph types with value semantics
- Includes specialized graph adapter types like DAG, Tree and Compound (a graph+tree structure)
- Provides graph query and traversal methods
- Includes basic algorithms like depth-first search, topological sort, and checking for cycles
- Serde support for easy serialization/deserialization
- Supports DOT (Graphviz) and Mermaid formats for visualization provided in the `wolf-graph-dot` and `wolf-graph-mermaid` crates.

## Main Components

- Traits defining functionality for visitable graphs, and mutable versions of each
- Concrete Graph, DAG, Tree and Compound types built on those traits
- Uses [FUIDs]https://crates.io/crates/fuid (Friendly Unique Identifiers) for node and edge identifiers
- DFS Visitor trait and algorithm enabling custom traversals
- Algorithms for topological sort, cycle detection, and graph differences
- Errors and utility types
- Strong test coverage

## Documentation

Currently the best documentation is the unit tests in the `tests` directory.