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
49
50
51
52
53
54
55
56
//! A graph API offering a powerful graph trait that allows for the construction of
//! many types of graphs for different use-cases. Implements powerful parallel traversal
//! algorithms offering speedups when traversing the graph.
//!
//! # Example Usage
//!
//! ```
//! use fastgraph::core::*;
//! use fastgraph::collections::*;
//!
//! fn test() {
//! let mut g = Digraph::<usize, Empty, Empty>::new();
//!
//! g.add_node(1, Empty);
//! g.add_node(2, Empty);
//! g.add_node(3, Empty);
//! g.add_node(4, Empty);
//! g.add_node(5, Empty);
//! g.add_node(6, Empty);
//!
//! g.add_edge(1, 2, Empty);
//! g.add_edge(1, 3, Empty);
//! g.add_edge(2, 1, Empty);
//! g.add_edge(2, 3, Empty);
//! g.add_edge(3, 1, Empty);
//! g.add_edge(3, 5, Empty);
//! g.add_edge(5, 2, Empty);
//! g.add_edge(5, 4, Empty);
//! g.add_edge(5, 1, Empty);
//! g.add_edge(4, 5, Empty);
//! g.add_edge(4, 3, Empty);
//! g.add_edge(4, 2, Empty);
//! g.add_edge(4, 6, Empty);
//!
//! let sink = g.get_node(6).unwrap();
//! let res1 = g.par_breadth_first(1,
//! |edge|{
//! if edge.target() == sink {
//! Traverse::Finish
//! } else {
//! Traverse::Include
//! }
//! }).unwrap();
//!
//! let shortest_path = backtrack_edges(&res1);
//!
//! for edge in shortest_path {
//! println!("{}", edge.upgrade().unwrap())
//! }
//! }
//!
//! ```