An open API service indexing awesome lists of open source software.

https://github.com/filipporanza/simplegraph

A simple graph implementation
https://github.com/filipporanza/simplegraph

adjacency-list adjacency-matrix graph graph-library

Last synced: 6 months ago
JSON representation

A simple graph implementation

Awesome Lists containing this project

README

          

# simplegraph
![Test](https://github.com/FilippoRanza/simplegraph/workflows/Rust/badge.svg) ![crates.io](https://img.shields.io/crates/v/simplegraph.svg)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=round-square)](http://makeapullrequest.com)

**simplegraph** provides a simple graph implementation
in Rust.

## Features
**simplegraph** aims to be as simple as possible while providing
all the features that I need.
You can consider using **simplegraph** if you need:
- support for direct and undirected graphs;
- [Adjacency List](https://en.wikipedia.org/wiki/Adjacency_list) or [Adjacency Matrix](https://en.wikipedia.org/wiki/Adjacency_matrix) based graphs;
- Graph to [Graphviz](https://en.wikipedia.org/wiki/Adjacency_list) (dot) source conversion;
- Serialization and Deserialization support with [Serde](https://serde.rs/);
- dynamic arc insertion;
- update arc's and nodes' weights.

On the other side some intentional restriction are set on the graphs:
- the number of nodes is set at creation time
- nodes' and arcs' weights *must* implement [num_traits::Num](https://docs.rs/num-traits/latest/num_traits/trait.Num.html)
- weights are always present: it is not possible to create a simple unweighted graph.

**simplegraph** does not provide any check on the operation performed on it. It is
caller's responsibility to ensure operations soundness.

## Why?
To my best knowledge [petgrah](https://github.com/petgraph/petgraph)
is the most used general purpose graph library for Rust.
It is a very complete and complex library that allows to implement complex
graphs for various purposes.
If you choose/need to use a graph library you should check it out too.

**simplegraph** aims to be a simple *wrap* around adjacency list or matrix.
I've implemented this library mainly for my own use and avoid
some - from my point of view - needless complexities. So it may
lack some features that I'll add just when, and if, I'll need them.