public static IEnumerable <T> DFS <T>(this IGraph <T> graph, T startVertex, HashSet <T> visitedVertices, Action <T> lastVertexAction) where T : IEquatable <T> { var stack = new StackOnArray <T>(); stack.Push(startVertex); T previous = startVertex; while (!stack.IsEmpty) { var current = stack.Pop(); if (!visitedVertices.Contains(current)) { visitedVertices.Add(current); // preserve edges order var edges = new List <Edge <T> >(graph.EdgesOf(current)); for (int i = edges.Count - 1; i >= 0; i--) { stack.Push(edges[i].Target); } if (edges.Count == 0) { lastVertexAction(current); } yield return(current); } else { lastVertexAction(previous); } previous = current; } }
public void PushElement() { var stack = new StackOnArray <int>(); stack.Push(1); Assert.Equal(1, stack.Pop()); }
public void PushPop() { var stack = new StackOnArray <int>(); stack.Push(1); Assert.Equal(1, stack.Pop()); Assert.Equal(0, stack.Count); }
public void Peek() { var stack = new StackOnArray <string>(); stack.Push("one"); Assert.Equal("one", stack.Peek()); Assert.Equal(1, stack.Count); }
public void PushTenElements() { var stack = new StackOnArray <int>(); for (int i = 0; i < 10; i++) { stack.Push(i); } Assert.Equal(10, stack.Count); }
public void Initialize() { arrayStack = new StackOnArray(); listStack = new StackOnList(); }
public void StackOnArray_Full_AfterPop_IEnumeratorTest() { var stack = new StackOnArray <int>(); CheckFullEnumeratorAfterPop(stack); }
public void StackOnArray_Empty_IEnumeratorTest() { var stack = new StackOnArray <int>(); CheckEmptyEnumerator(stack); }
public void StackOnArray_MultiplePopTest() { var stack = new StackOnArray <string>(); CheckMultiplePop(stack); }
public void StackOnArray_PopTest() { var stack = new StackOnArray <string>(); CheckPop(stack); }
public void StackOnArray_PopFromEmptyStackTest() { var stack = new StackOnArray <string>(); stack.Pop(); }
public void StackOnArray_Double_IEnumeratorTest() { var stack = new StackOnArray <int>(); CheckDoubleEnumerator(stack); }
public void PeekEmptyStack() { var stack = new StackOnArray <int>(); Assert.Throws <StackException>(() => stack.Peek()); }