graaf 0.17.1

Functions and types for working with graphs
Documentation

Graaf!Build status Crates.io API reference Coverage Status

Functions and types for working with graphs

Graaf is Dutch for

  1. graph
  2. count
  3. dig

This crate is in alpha, and the API will change.

Installation

Add the following to your Cargo.toml:

[dependencies]
graaf = "0.17.1"

Usage

use graaf::{
    op::{
        AddEdge,
        Indegree,
        Outdegree,
    },
    repr::AdjacencyMatrix,
};

let mut adj = AdjacencyMatrix::<4>::new();

adj.add_edge(0, 1);
adj.add_edge(0, 2);
adj.add_edge(1, 3);
adj.add_edge(2, 3);

assert_eq!(adj.indegree(0), 0);
assert_eq!(adj.indegree(1), 1);
assert_eq!(adj.indegree(2), 1);
assert_eq!(adj.indegree(3), 2);

assert_eq!(adj.outdegree(0), 2);
assert_eq!(adj.outdegree(1), 1);
assert_eq!(adj.outdegree(2), 1);
assert_eq!(adj.outdegree(3), 0);

Features

Algorithms: algo

Breadth-first search: bfs

Dijkstra's algorithm: dijkstra

Operations: op

Graph operations are modeled as traits. These traits are implemented for various graph representations built from standard library containers.

Custom representations: repr

Beyond representations built from standard library collections, Graaf offers the following custom representations:

  • AdjacencyMatrix: an adjacency matrix representation of an unweighted directed graph stored as a bit array.