Make depth_first_search
into a standalone function
Does not necessarily change much, but we never overwrite it, so I see no reason for it to be in the `Successors` trait. (+we already have a similar `is_cyclic`)
This commit is contained in:
parent
3124fa9310
commit
e8d2221e3b
6 changed files with 21 additions and 17 deletions
|
@ -30,10 +30,6 @@ pub trait Successors: DirectedGraph {
|
|||
Self: 'g;
|
||||
|
||||
fn successors(&self, node: Self::Node) -> Self::Successors<'_>;
|
||||
|
||||
fn depth_first_search(&self, from: Self::Node) -> iterate::DepthFirstSearch<'_, Self> {
|
||||
iterate::DepthFirstSearch::new(self).with_start_node(from)
|
||||
}
|
||||
}
|
||||
|
||||
pub trait Predecessors: DirectedGraph {
|
||||
|
@ -57,3 +53,10 @@ where
|
|||
.run_from_start(&mut iterate::CycleDetector)
|
||||
.is_some()
|
||||
}
|
||||
|
||||
pub fn depth_first_search<G>(graph: &G, from: G::Node) -> iterate::DepthFirstSearch<'_, G>
|
||||
where
|
||||
G: ?Sized + Successors,
|
||||
{
|
||||
iterate::DepthFirstSearch::new(graph).with_start_node(from)
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
use crate::graph;
|
||||
|
||||
use super::*;
|
||||
|
||||
fn create_graph() -> VecGraph<usize> {
|
||||
|
@ -37,6 +39,6 @@ fn successors() {
|
|||
#[test]
|
||||
fn dfs() {
|
||||
let graph = create_graph();
|
||||
let dfs: Vec<_> = graph.depth_first_search(0).collect();
|
||||
let dfs: Vec<_> = graph::depth_first_search(&graph, 0).collect();
|
||||
assert_eq!(dfs, vec![0, 1, 3, 4, 2]);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue