我正在使用Rust的petgraph库,我想知道如何检查节点是否是循环的一部分。petgraph::algo::is_cyclic_directed
函数会告诉我图中是否存在循环,但在查阅了所有文档后,我找不到任何函数可以告诉我节点是否是循环的一部分。我本以为这将是一个足够常见的任务,因此需要一个辅助函数。
现在我可以自己遍历这个图了,但是我能写出的代码既不是最简洁的,也不太可能是高效的。
这里最好的选择是什么?
我认为这段代码是有效的,但如果有人知道更好的方法,我将欣赏其他方法!
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
}