1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//! `graphalgs` is a graph algorithms library based on the Rust
//! [petgraph](https://docs.rs/petgraph/0.5.1/petgraph/) crate.
//!
//! # Examples
//!
//! ```
//! use graphalgs::shortest_path::floyd_warshall;
//! use graphalgs::metrics::{ weighted_radius, weighted_diameter };
//! use petgraph::Graph;
//!
//! let inf = f32::INFINITY;
//!
//! // Create a graph with `f32` edge weights.
//! let graph = Graph::<(), f32>::from_edges(&[
//! (0, 1, 2.0), (1, 2, 10.0), (1, 3, -5.0),
//! (3, 2, 2.0), (2, 3, 20.0),
//! ]);
//!
//! // Calculate the distance matrix using the Floyd-Warshall algorithm.
//! assert_eq!(
//! floyd_warshall(&graph, |edge| *edge.weight()),
//! Ok(vec![vec![0.0, 2.0, -1.0, -3.0],
//! vec![inf, 0.0, -3.0, -5.0],
//! vec![inf, inf, 0.0, 20.0],
//! vec![inf, inf, 2.0, 0.0]])
//! );
//!
//! // Calculate the radius and diameter of this graph,
//! // taking into account the weights of the edges.
//! assert_eq!(weighted_radius(&graph, |edge| *edge.weight()), Some(2.0));
//! assert_eq!(weighted_diameter(&graph, |edge| *edge.weight()), Some(inf));
//! ```
pub extern crate nalgebra;
pub extern crate petgraph;