Fix bug in order of iterative dfs
diff --git a/src/visit/traversal.rs b/src/visit/traversal.rs
index 3a40e7c..672a688 100644
--- a/src/visit/traversal.rs
+++ b/src/visit/traversal.rs
@@ -86,7 +86,6 @@
/// the dfs from a particular node.
pub fn move_to(&mut self, start: N)
{
- self.discovered.visit(start);
self.stack.clear();
self.stack.push(start);
}
@@ -95,14 +94,15 @@
pub fn next<G>(&mut self, graph: G) -> Option<N>
where G: IntoNeighbors<NodeId=N>,
{
- if let Some(node) = self.stack.pop() {
- for succ in graph.neighbors(node) {
- if self.discovered.visit(succ) {
- self.stack.push(succ);
+ while let Some(node) = self.stack.pop() {
+ if self.discovered.visit(node) {
+ for succ in graph.neighbors(node) {
+ if !self.discovered.is_visited(&succ) {
+ self.stack.push(succ);
+ }
}
+ return Some(node);
}
-
- return Some(node);
}
None
}