243 个版本 (82 个破坏性)
| 新 0.83.0 | 2024 年 8 月 23 日 |
|---|---|
| 0.81.0 | 2024 年 8 月 17 日 |
| 0.75.4 | 2024 年 7 月 30 日 |
| 0.2.3 | 2024 年 3 月 31 日 |
#155 在 算法
3,171 每月下载
780KB
17K SLoC
Graaf

Rust 驱动的有向图。
目录
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
graaf = "0.83.0"
有向图类型
Graaf 提供有向图的表示。
adjacency_list表示无权稀疏有向图。adjacency_matrix表示无权稠密有向图。adjacency_list_weighted表示弧加权稀疏有向图。
创建有向图
gen 模块提供有向图生成器。
Biclique生成完全二分图。Circuit生成电路图。Complete生成一个完整的有向图。Cycle生成一个双向电路。Empty生成一个没有弧的有向图。ErdosRenyi生成一个随机有向图。Path生成一个路径有向图。RandomTournament生成一个随机竞赛。Star生成一个星形有向图。
每个有向图的表示都可以通过op 模块中的操作来构建。
操作
op 模块提供了有向图操作特质。这些有向图类型实现了这些特质。可以为自定义有向图类型实现这些特质。操作是算法的基础。
AddArcWeighted向一个带权弧有向图中添加一个弧。AddArc向一个无权有向图中添加一个弧。ArcWeight返回一个弧的权重。ArcsWeighted返回一个有向图的带权弧。Arcs返回一个有向图的弧。Complement返回一个有向图的补图。Converse返回一个有向图的逆图。DegreeSequence返回一个有向图的度序列。Degree返回一个顶点的度。HasArc检查一个有向图是否包含一个弧。HasEdge检查一个有向图是否包含一条边。HasWalk检查一个有向图是否包含一个遍历。InNeighbors返回一个顶点的入邻居。IndegreeSequence返回一个有向图的入度序列。Indegree返回一个顶点的入度。IsBalanced检查一个有向图是否是平衡的。IsComplete检查一个有向图是否是完整的。IsIsolated检查一个顶点是否是孤立的。IsOriented检查一个有向图是否为有向图。IsPendant检查一个顶点是否为悬挂顶点。IsRegular检查一个有向图是否为正则图。IsSemicomplete检查一个有向图是否为半完备图。IsSimple检查一个有向图是否为简单图。IsSpanningSubdigraph检查一个有向图是否为覆盖超图的子图。IsSubdigraph检查一个有向图是否为子图。IsSuperdigraph检查一个有向图是否为超图。IsSymmetric检查一个有向图是否为对称图。IsTournament检查一个有向图是否为竞赛图。Order返回有向图中顶点的数量。OutNeighborsWeighted返回一个顶点的加权出邻居。OutNeighbors返回一个顶点的出邻居。OutdegreeSequence返回有向图的出度序列。Outdegree返回一个顶点的出度。RemoveArc从有向图中移除一条弧。SemidegreeSequence返回有向图的半度序列。Sinks返回有向图的汇点。Size返回有向图中弧的数量。Sources返回有向图的源点。Vertices返回有向图中的顶点。
算法
模块 algo 提供有向图算法。
Bellman-Ford-Moore
Bellman-Ford-Moore 算法在具有负权重的弧权重有向图中找到最短路径。
single_source_distances找到最短距离。
广度优先搜索 (BFS)
广度优先搜索按照顶点与源点的距离顺序探索无权有向图中的顶点。
bfs::Bfs迭代顶点。bfs_dist::Bfs迭代顶点和它们从源点的距离。bfs_successors::Bfs迭代顶点和它们的后续顶点。bfs_dist::Bfs::distances寻找最短距离。bfs_successors::Bfs::predecessors寻找前驱节点。bfs_successors::Bfs::shortest_path寻找最短路径。
深度优先搜索 (DFS)
深度优先搜索按照从源点出发的深度顺序探索无权有向图中的顶点。
dfs::Dfs遍历顶点。dfs_dist::Dfs遍历顶点和从源点到它们的距离。
Dijkstra
Dijkstra算法在弧加权有向图中找到最短路径。
dijkstra::Dijkstra遍历顶点。dijkstra_dist::Dijkstra遍历顶点。dijkstra_pred::Dijkstra遍历顶点和它们的前驱节点。dijkstra_dist::Dijkstra::distances寻找最短距离。dijkstra_pred::Dijkstra::predecessors寻找前驱节点。dijkstra_pred::Dijkstra::shortest_path寻找最短路径。
Floyd-Warshall
Floyd-Warshall算法在弧加权有向图中找到所有顶点对之间的最短路径。
distances寻找最短距离。
Tarjan
Tarjan算法在有向图中找到强连通分量。
strongly_connected_components寻找强连通分量。
前驱树
一个 PredecessorTree 是广度优先搜索的结果。
这些函数生成一个前驱树。
距离矩阵
一个 DistanceMatrix 包含了有向图中所有顶点对之间的最短距离。
center寻找有向图的核心。diameter找到有向图的直径。eccentricities返回顶点的离心率。is_connected检查有向图是否连通。periphery找到有向图的边缘。
命名约定
s表示一个源顶点。t表示一个目标顶点。u表示一个尾顶点或作用域中的第一个顶点。v表示一个头顶点或作用域中的第二个顶点。w表示弧的权重。x表示一个尾顶点或作用域中的第三个顶点。y表示一个头顶点或作用域中的第四个顶点。
项目目标
- 灵活的有向图操作API
- 一套全面的算法
- 常见有向图的生成器
- 具有竞争力的性能
- 完整的文档
- 广泛的属性测试
- 完整的单元测试覆盖
变更日志
查看CHANGELOG.md以获取更改列表。
许可
根据您的选择,许可协议为Apache License, Version 2.0或MIT license。
联系
随时提出问题或建议。