6个版本
0.1.5 | 2024年3月30日 |
---|---|
0.1.4 | 2024年3月28日 |
#1497 in 算法
每月 40 次下载
15KB
190 行
mgraph
这是一个打包在crate中的简单图库(https://crates.io/crates/mgraph)。您可以通过以下命令将其添加到您的项目中: cargo add mgraph
文档:https://docs.rs/mgraph/latest/mgraph/
示例用法
假设您想使用Dijkstra算法在图中查找最短路径。
- 首先,我们需要创建图本身
let mutgraph= mgraph::Graph::new()
- 之后,我们需要在我们的图中添加节点。节点由整数表示。
graph.add_node(0);
graph.add_node(1);
graph.add_node(2);
graph.add_node(3);
- 现在我们可以添加节点之间的连接 - 边
graph.add_edge(0, 1, 6);
graph.add_edge(0, 2, 16);
graph.add_edge(1, 2, 7);
graph.add_edge(2, 3, 8);
add_edge()
函数的参数是源节点、目标节点和边权重。如果您想创建一个只能从源节点到目标节点的边,但不能反向,可以使用 add_edge_directed()
代替。
- 现在我们可以在我们的图上运行Dijkstra算法并查看结果
let result = graph.shortest_path(0, 2);
let parents = result.parents.unwrap();
let cost = result.cost.unwrap();
println!("{:#?}\n\n{:?}", cost, parents);
shortest_path()
函数返回两个值: cost
和 parents
。 cost
是从节点A到节点B的最短路径的成本(如果存在),而 parents
是一个HashMap,表示节点及其前驱(父节点)。我们需要 parents
来能够在节点A到节点B之间恢复完整的最短路径,如果存在的话。
- 为了恢复完整路径,我们可以使用
resore_path()
函数
let shortest_path = graph.restore_path(0, 2, parents);
shortest_path()
函数接收 source
、target
和 parents
作为参数。
这只是这个库的许多用途之一,不过,您可以自由地贡献到 README.md 并改进这个库和文档,我会非常感激
依赖项
~0.8–1.6MB
~28K SLoC