Rust 生锈';如何测试节点是否是循环的一部分?

Rust 生锈';如何测试节点是否是循环的一部分?,rust,petgraph,Rust,Petgraph,我正在使用Rust的库,想知道如何检查节点是否是循环的一部分。petgraph::algo::is_cyclic_directed函数将告诉我图中是否有循环,但在查看所有文档后,我找不到任何函数可以告诉我节点是否是循环的一部分。我本以为这将是一个足够常见的任务,一个助手功能将得到保证 现在我可以自己遍历这个图了,但是我能想到的代码既不是最简洁的,也不可能是高效的 这里最好的选择是什么?我认为这段代码是可行的,但是如果有人知道更好的方法,我会很感激你的选择 use petgraph::{algo,

我正在使用Rust的库,想知道如何检查节点是否是循环的一部分。
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
}
使用petgraph::{algo,visit};
fn是循环中的节点(图:G,节点:G::NodeId)->bool
其中G:visit::intoNeights+visit::Visitable{
让mut space=algo::DfsSpace::new(&graph);
用于图中的邻居。邻居(节点){
如果algo::具有路径连接(图、邻居、节点、某些(&mut空间)){
返回真值
}
}
假的
}

我想说的是使用
algo::has\u path\u从节点连接到节点,如果返回true,则有一个循环。不幸的是,“如果[node]from和to相等,则此函数返回true。”因此这不起作用。@DavidSullivan Yep在阅读完整描述之前,有一些类似的选项似乎很有希望