8个版本
0.1.1 | 2023年2月3日 |
---|---|
0.1.0 | 2022年10月9日 |
0.0.6 | 2021年6月10日 |
0.0.5 | 2021年3月2日 |
0.0.2 | 2021年1月23日 |
在算法类别中排名910
每月下载量46次
185KB
3.5K SLoC
graphalgs
描述
基于Rust "petgraph"库的图算法。
相关性
Petgraph
是Rust中处理图的优秀工具,但并非所有算法都适合放在那里,因此graphalgs
库将成为基于petgraph
实现的多种算法的存储库。
主要功能
最短路径算法
- APD (Seidel)算法用于在无权、无向、连通图中解决所有对最短路径问题。该算法由于使用矩阵乘法而表现出卓越的性能。
- A*最短路径算法,从petgraph中重新导出。
- Bellman-Ford算法,从petgraph中重新导出,用于计算从源节点到所有其他节点的最短路径。
- Dijkstra的最短路径算法,从petgraph中重新导出。
- Floyd-Warshall算法用于解决所有对最短路径问题。
- Johnson算法用于解决所有对最短路径问题。
- Shortest Path Faster Algorithm 计算源节点到所有其他节点的最短距离。
- shortest_distances算法基于BFS。
- distance_map 将距离矩阵转换为hashmap。
- 从petgraph的Floyd-Warshall
最小生成树(MST)算法
- Borůvka的算法
- Prim的算法
- Kruskal的算法从petgraph中重新导出。
度量
基于顶点之间距离概念的基本图特征。
与图连通性相关的算法
- 割点
- 桥
- 连通分量数量(从petgraph导出)。
- 是否有连接路径(从petgraph导出)。
- 约简 将每个强连通分量压缩成一个节点并返回结果(从petgraph导出)。
- Kosaraju算法(从petgraph导出)。
- Tarjan算法(从petgraph导出)。
生成
生成各种图。
竞赛
简化处理类似竞赛这类图的算法。
难以分类的特殊算法
回路
用途
作为库
use graphalgs::shortest_path::floyd_warshall;
use graphalgs::metrics::{ weighted_radius, weighted_diameter };
use petgraph::Graph;
let inf = f32::INFINITY;
// Create a graph with `f32` edge weights.
let graph = Graph::<(), f32>::from_edges(&[
(0, 1, 2.0), (1, 2, 10.0), (1, 3, -5.0),
(3, 2, 2.0), (2, 3, 20.0),
]);
// Calculate the distance matrix using the Floyd-Warshall algorithm.
assert_eq!(
floyd_warshall(&graph, |edge| *edge.weight()),
Ok(vec![vec![0.0, 2.0, -1.0, -3.0],
vec![inf, 0.0, -3.0, -5.0],
vec![inf, inf, 0.0, 20.0],
vec![inf, inf, 2.0, 0.0]])
);
// Calculate the radius and diameter of this graph,
// taking into account the weights of the edges.
assert_eq!(weighted_radius(&graph, |edge| *edge.weight()), Some(2.0));
assert_eq!(weighted_diameter(&graph, |edge| *edge.weight()), Some(inf));
如果您有任何评论或建议,或者您突然发现了一个错误,请发起一个新的问题或请求。
依赖
~5.5MB
~93K SLoC