6个版本

0.1.5 2024年3月30日
0.1.4 2024年3月28日

#1497 in 算法

每月 40 次下载

MIT 许可证

15KB
190

mgraph

这是一个打包在crate中的简单图库(https://crates.io/crates/mgraph)。您可以通过以下命令将其添加到您的项目中: cargo add mgraph

文档:https://docs.rs/mgraph/latest/mgraph/

示例用法

假设您想使用Dijkstra算法在图中查找最短路径。

  1. 首先,我们需要创建图本身

let mutgraph= mgraph::Graph::new()

  1. 之后,我们需要在我们的图中添加节点。节点由整数表示。
graph.add_node(0);
graph.add_node(1);
graph.add_node(2);
graph.add_node(3);
  1. 现在我们可以添加节点之间的连接 - 边
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() 代替。

  1. 现在我们可以在我们的图上运行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() 函数返回两个值: costparentscost 是从节点A到节点B的最短路径的成本(如果存在),而 parents 是一个HashMap,表示节点及其前驱(父节点)。我们需要 parents 来能够在节点A到节点B之间恢复完整的最短路径,如果存在的话。

  1. 为了恢复完整路径,我们可以使用 resore_path() 函数
let shortest_path = graph.restore_path(0, 2, parents);

shortest_path() 函数接收 sourcetargetparents 作为参数。

这只是这个库的许多用途之一,不过,您可以自由地贡献到 README.md 并改进这个库和文档,我会非常感激

依赖项

~0.8–1.6MB
~28K SLoC