Module graaf::op

source ·
Expand description

Operations on graphs

These operations are modeled as traits that can be implemented by types that represent graphs. The traits are implemented for combinations of standard types like array, slice, Vec, BTreeMap, BTreeSet, HashMap, and HashSet when the implementation has a close-to-optimal complexity.

§Examples

extern crate alloc;

use {
    alloc::collections::BTreeSet,
    graaf::op::{
        AddEdge,
        Indegree,
        Outdegree,
        RemoveEdge,
    },
};

let mut graph = vec![BTreeSet::new(); 3];

// 1 ← 0 → 2

graph.add_edge(0, 1);
graph.add_edge(0, 2);

assert_eq!(graph.outdegree(0), 2);
assert_eq!(graph.indegree(1), 1);
assert_eq!(graph.indegree(2), 1);

graph.remove_edge(0, 1);

assert_eq!(graph.outdegree(0), 1);
assert_eq!(graph.indegree(1), 0);
assert_eq!(graph.indegree(2), 1);

§Supported types

§Adjacency list

§Unweighted

  • BTreeMap<usize, BTreeSet<usize>>
  • BTreeMap<usize, Vec<usize>>
  • HashMap<usize, HashSet<usize>>
  • HashMap<usize, Vec<usize>>
  • Vec<BTreeSet<usize>>
  • Vec<HashSet<usize>>
  • Vec<Vec<usize>>
  • [BTreeSet<usize>; V]
  • [BTreeSet<usize>]
  • [HashSet<usize>; V]
  • [HashSet<usize>]
  • [Vec<usize>; V]
  • [Vec<usize>]

§Weighted

  • BTreeMap<usize, BTreeMap<usize, W>>
  • BTreeMap<usize, BTreeSet<(usize, W)>>
  • BTreeMap<usize, Vec<(usize, W)>>
  • HashMap<usize, HashMap<usize, W>>
  • HashMap<usize, HashSet<(usize, W)>>
  • HashMap<usize, Vec<(usize, W)>>
  • Vec<BTreeMap<usize, W>>
  • Vec<BTreeSet<(usize, W)>>
  • Vec<HashMap<usize, W>>
  • Vec<HashSet<(usize, W)>>
  • Vec<Vec<(usize, W)>>
  • [BTreeMap<usize, W>; V]
  • [BTreeMap<usize, W>]
  • [BTreeSet<(usize, W)>; V]
  • [BTreeSet<(usize, W)>]
  • [HashMap<usize, W>; V]
  • [HashMap<usize, W>]
  • [HashSet<(usize, W)>; V]
  • [HashSet<(usize, W)>]
  • [Vec<(usize, W)>; V]
  • [Vec<(usize, W)>]

§Edge list

§Unweighted

  • BTreeSet<(usize, usize)>
  • HashSet<(usize, usize)>
  • Vec<(usize, usize)>
  • [(usize, usize); V]
  • [(usize, usize)]

§Weighted

  • BTreeSet<(usize, usize, W)>
  • HashSet<(usize, usize, W)>
  • Vec<(usize, usize, W)>
  • [(usize, usize, W); V]
  • [(usize, usize, W)]

Re-exports§

Modules§