Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
        public void PushElement()
        {
            var stack = new StackOnArray <int>();

            stack.Push(1);

            Assert.Equal(1, stack.Pop());
        }
Exemplo n.º 3
0
        public void PushPop()
        {
            var stack = new StackOnArray <int>();

            stack.Push(1);

            Assert.Equal(1, stack.Pop());
            Assert.Equal(0, stack.Count);
        }
Exemplo n.º 4
0
        public void Peek()
        {
            var stack = new StackOnArray <string>();

            stack.Push("one");

            Assert.Equal("one", stack.Peek());
            Assert.Equal(1, stack.Count);
        }
Exemplo n.º 5
0
        public void PushTenElements()
        {
            var stack = new StackOnArray <int>();

            for (int i = 0; i < 10; i++)
            {
                stack.Push(i);
            }

            Assert.Equal(10, stack.Count);
        }
Exemplo n.º 6
0
 public void Initialize()
 {
     arrayStack = new StackOnArray();
     listStack  = new StackOnList();
 }
Exemplo n.º 7
0
        public void StackOnArray_Full_AfterPop_IEnumeratorTest()
        {
            var stack = new StackOnArray <int>();

            CheckFullEnumeratorAfterPop(stack);
        }
Exemplo n.º 8
0
        public void StackOnArray_Empty_IEnumeratorTest()
        {
            var stack = new StackOnArray <int>();

            CheckEmptyEnumerator(stack);
        }
Exemplo n.º 9
0
        public void StackOnArray_MultiplePopTest()
        {
            var stack = new StackOnArray <string>();

            CheckMultiplePop(stack);
        }
Exemplo n.º 10
0
        public void StackOnArray_PopTest()
        {
            var stack = new StackOnArray <string>();

            CheckPop(stack);
        }
Exemplo n.º 11
0
        public void StackOnArray_PopFromEmptyStackTest()
        {
            var stack = new StackOnArray <string>();

            stack.Pop();
        }
Exemplo n.º 12
0
        public void StackOnArray_Double_IEnumeratorTest()
        {
            var stack = new StackOnArray <int>();

            CheckDoubleEnumerator(stack);
        }
Exemplo n.º 13
0
        public void PeekEmptyStack()
        {
            var stack = new StackOnArray <int>();

            Assert.Throws <StackException>(() => stack.Peek());
        }