pub struct WeightedGraph<const SIZE: usize, T: Copy = f32> { /* private fields */ }
Expand description

Compile time graphs.

use const_graphs::WeightedGraph;

const SIZE: usize = 500;
// You can use const.
const graph1: WeightedGraph<SIZE, usize>
  = WeightedGraph::new();

// And, static.
static mut graph2: WeightedGraph<SIZE>
  = WeightedGraph::new(); // f32

unsafe {
  graph2.add_edge(0, 1, 0.1);
  assert!(graph2.has_edge(0, 1));
}

// And, of course, let too:
let graph3 = WeightedGraph::<SIZE, f64>::new();

Implementations§

Add an edge to the graph between i and j.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<10>::new();
graph.add_edge(0, 1, 0.7);
assert!(graph.has_edge(0, 1));

See also WeightedGraph::add_edge_undirected.

Add an undirected edge to the graph between i and j.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<10>::new();
graph.add_edge_undirected(0, 1, 3.0);
assert!(graph.has_edge(0, 1));
assert!(graph.has_edge(1, 0));

See also WeightedGraph::add_edge.

Remove an edge from the graph between i and j.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<10>::new();
graph.add_edge(0, 1, 0.3);
graph.remove_edge(0, 1);
assert!(!graph.has_edge(0, 1));

See also WeightedGraph::remove_edge_undirected.

Remove an undirected edge from the graph between i and j.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<10>::new();
graph.add_edge_undirected(0, 1, 0.4);
graph.remove_edge_undirected(0, 1);
assert!(!graph.has_edge(0, 1));
assert!(!graph.has_edge(1, 0));

See also WeightedGraph::remove_edge.

Gets the optional edge between i and j.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<10>::new();
graph.add_edge(0, 1, 16.0);
assert_eq!(graph.get_edge(0, 1), Some(16.0));

Checks whether there is an edge between i and j.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<10>::new();
// The graph is initialized empty.
assert!(!graph.has_edge(0, 1));

Returns an array where the ith element is the optional edge between vertex and i.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<3>::new();
graph.add_edge(0, 2, 2.3);
assert_eq!(
  graph.get_edges(0),
  &[None, None, Some(2.3)]
);

See also WeightedGraph::get_inverse_edges.

Returns an array where the ith element is the optional edge between i and vertex. This is useful in a few graph algorithms where you need to know which vertices “point” to the current, and not the contrary.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<3>::new();
graph.add_edge(0, 2, 0.8);
assert_eq!(
  graph.get_inverse_edges(2),
  [Some(0.8), None, None]
);

See also WeightedGraph::get_edges.

Returns the maximum number of edges of a graph.

use const_graphs::WeightedGraph;

let graph = WeightedGraph::<3>::new();
// The possible edges are:
// 0 -> 1
// 0 -> 2
// 1 -> 0
// 1 -> 2
// 2 -> 0
// 2 -> 1
assert_eq!(graph.max_number_of_edges(), 6);

Returns the density of a graph, that is, the ratio between the number of edges and the maximum number of possible edges.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<3>::new();
graph.add_edge_undirected(0, 1, 0.1);
graph.add_edge_undirected(0, 2, 1.1);
graph.add_edge_undirected(1, 2, 0.5);
assert_eq!(graph.density(), 1.0);

Remove all edges from the graph.

use const_graphs::WeightedGraph;

let mut graph = WeightedGraph::<3>::new();
graph.add_edge_undirected(0, 1, 0.2);
graph.add_edge_undirected(0, 2, 0.6);
graph.add_edge_undirected(1, 2, 5.5);
graph.clear();

assert_eq!(graph.density(), 0.0);

Creates a new weighted graph.

use const_graphs::WeightedGraph;

const SIZE: usize = 10;
let graph = WeightedGraph::<SIZE>::new();

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.