Rust 的 Petgraph 库有一堆过滤器“适配器”,但我找不到任何示例或教程来说明如何使用它们。一些(但不是全部)具有构造函数,例如EdgeFiltered.from_fn(),它采用图形和函数,但不清楚如何将它与Dfs或astar等搜索方法一起使用,因为它们没有过滤器参数。
那么如何使用这些过滤器呢?例如,如果我有一个具有整数边权重的图,您将如何:
- 执行深度优先搜索,但排除具有负权重的边缘,
- 执行 astar 搜索,排除具有负权重的边?
适配器实现GraphBase
,您可以将图形包装在其中并将适配器结构传递给例如Dfs
:
use petgraph::Graph;
use petgraph::visit::Dfs;
use petgraph::visit::EdgeFiltered;
fn main() {
let mut graph = Graph::<(), i64>::new();
let a = graph.add_node(());
let b = graph.add_node(());
let e = graph.add_edge(a, b, -1);
let filtered = EdgeFiltered::from_fn(&graph, |edge_ref| *edge_ref.weight() > 0 );
let dfs = Dfs::new(&filtered, a);
}