1

Rust 的 Petgraph 库有一堆过滤器“适配器”,但我找不到任何示例或教程来说明如何使用它们。一些(但不是全部)具有构造函数,例如EdgeFiltered.from_fn(),它采用图形和函数,但不清楚如何将它与Dfsastar等搜索方法一起使用,因为它们没有过滤器参数。

那么如何使用这些过滤器呢?例如,如果我有一个具有整数边权重的图,您将如何:

  1. 执行深度优先搜索,但排除具有负权重的边缘,
  2. 执行 astar 搜索,排除具有负权重的边?
4

1 回答 1

1

适配器实现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);
}

游乐场链接

于 2021-03-17T16:15:07.600 回答