pub fn barbell_graph<G, T, F, H, M>(
num_mesh_nodes: Option<usize>,
num_path_nodes: Option<usize>,
mesh_weights: Option<Vec<T>>,
path_weights: Option<Vec<T>>,
default_node_weight: F,
default_edge_weight: H,
) -> Result<G, InvalidInputError>
Expand description
Generate a barbell graph where two identical complete graphs are connected by a path.
If neither num_path_nodes
nor path_weights
(described below) are
specified, then this is equivalent to two complete graphs joined together.
Arguments:
num_mesh_nodes
- The number of nodes to generate the mesh graph with. Node weights will be None if this is specified. If bothnum_mesh_nodes
andmesh_weights
are set, this will be ignored andmesh_weights
will be used.num_path_nodes
- The number of nodes to generate the path with. Node weights will be None if this is specified. If bothnum_path_nodes
andpath_weights
are set, this will be ignored andpath_weights
will be used.mesh_weights
- A list of node weights for the mesh graph. If bothnum_mesh_nodes
andmesh_weights
are set,num_mesh_nodes
will be ignored andmesh_weights
will be used.path_weights
- A list of node weights for the path. If bothnum_path_nodes
andpath_weights
are set,num_path_nodes
will be ignored andpath_weights
will be used.default_node_weight
- A callable that will return the weight to use for newly created nodes. This is ignored if node weights are specified.default_edge_weight
- A callable that will return the weight object to use for newly created edges.
ยงExample
use rustworkx_core::petgraph;
use rustworkx_core::generators::barbell_graph;
use rustworkx_core::petgraph::visit::EdgeRef;
let expected_edge_list = vec![
(0, 1),
(0, 2),
(0, 3),
(1, 2),
(1, 3),
(2, 3),
(3, 4),
(4, 5),
(5, 6),
(6, 7),
(7, 8),
(7, 9),
(7, 10),
(8, 9),
(8, 10),
(9, 10),
];
let g: petgraph::graph::UnGraph<(), ()> = barbell_graph(
Some(4),
Some(3),
None,
None,
|| {()},
|| {()},
).unwrap();
assert_eq!(
expected_edge_list,
g.edge_references()
.map(|edge| (edge.source().index(), edge.target().index()))
.collect::<Vec<(usize, usize)>>(),
)