2

我正在使用 Rust 的petgraph库,并且想知道如何检查节点是否是循环的一部分。该petgraph::algo::is_cyclic_directed函数会告诉我图中是否有任何循环,但是在查看所有文档后,我找不到任何可以告诉我节点是否是循环的一部分的函数。我原以为这将是一个足够常见的任务,需要一个辅助函数。

现在我可以自己遍历图表,但我能想出的代码既不是最简洁的,也不会是高效的。

这里最好的选择是什么?

4

1 回答 1

2

我认为这段代码是有效的,但如果有人知道更好的方法,我将不胜感激!

use petgraph::{algo, visit};
fn is_node_in_cycle<G>(graph: G, node: G::NodeId) -> bool
where G: visit::IntoNeighbors + visit::Visitable {
    let mut space = algo::DfsSpace::new(&graph);
    for neighbour in graph.neighbors(node) {
        if algo::has_path_connecting(graph, neighbour, node, Some(&mut space)) {
            return true
        }
    }
    false
}
于 2021-02-28T05:57:19.767 回答