/// <summary> /// A depth first search traversal of the graph, starting from a specified vertex. /// Returns the visited vertices of the graph. /// </summary> public virtual IEnumerable <T> DepthFirstWalk(T source) { // Check for existence of source if (VerticesCount == 0) { return(new ArrayListGeneric <T>(0)); } else if (!HasVertex(source)) { throw new KeyNotFoundException("The source vertex doesn't exist."); } var visited = new HashSet <T>(); var stack = new StackGeneric <T>(); var listOfNodes = new ArrayListGeneric <T>(VerticesCount); stack.Push(source); while (!stack.IsEmpty) { var current = stack.Pop(); if (!visited.Contains(current)) { listOfNodes.Add(current); visited.Add(current); foreach (var adjacent in Neighbours(current)) { if (!visited.Contains(adjacent)) { stack.Push(adjacent); } } } } return(listOfNodes); }
public void StackTests() { bool hasException = false; object peekObject = new object(); object poppedItem = new object(); StackGeneric <int?> stack1 = new StackGeneric <int?>(); StackComparable <int> stack2 = new StackComparable <int>(); StackComparable <string> stack3 = new StackComparable <string>(); #region StackTest :: empty stack<non-nullable> try { peekObject = stack2.Peek(); } catch (StackOperationException e) { hasException = true; Assert.IsNotNull(e.Message); } finally { Assert.IsNotNull(peekObject); Assert.IsTrue(hasException); } hasException = false; try { poppedItem = stack2.Pop(); } catch (StackOperationException e) { hasException = true; Assert.IsNotNull(e.Message); } finally { Assert.IsNotNull(poppedItem); Assert.IsTrue(hasException); } #endregion #region StackTest :: empty stack<nullable> hasException = false; try { peekObject = stack1.Peek(); } catch (StackOperationException e) { hasException = true; Assert.IsNotNull(e.Message); //should never come here } finally { Assert.IsFalse(hasException); Assert.IsNull(peekObject); } hasException = false; try { var test1 = "stack3.test1"; stack3.Push(test1); peekObject = stack3.Peek(); poppedItem = stack3.Pop(); Assert.IsTrue(poppedItem.Equals(peekObject)); Assert.IsTrue(poppedItem.Equals(test1)); Assert.IsNotNull(poppedItem); poppedItem = stack3.Pop(); } catch (StackOperationException e) { hasException = true; Assert.IsNotNull(e.Message); //should never come here } finally { Assert.IsFalse(hasException); Assert.IsNull(poppedItem); } hasException = false; try { peekObject = stack3.Peek(); } catch (StackOperationException e) { hasException = true; Assert.IsNotNull(e.Message); //should never come here } finally { Assert.IsFalse(hasException); Assert.IsNull(peekObject); } #endregion #region StackTest :: Get the minimum in the stack var test3_1 = "abcd"; var test3_2 = "ABCD"; var test3_3 = ""; var test3_4 = "xyz...12345"; var test3_5 = "5555"; stack3.Push(test3_1); Assert.IsTrue(test3_1.Equals(stack3.GetMinimum())); Assert.IsTrue(test3_1.Equals(stack3.Minimum)); stack3.Push(test3_2); Assert.IsTrue(test3_1.Equals(stack3.GetMinimum())); Assert.IsTrue(test3_1.Equals(stack3.Minimum)); stack3.Push(test3_3); Assert.IsTrue(test3_3.Equals(stack3.GetMinimum())); Assert.IsTrue(test3_3.Equals(stack3.Minimum)); stack3.Pop(); stack3.Push(test3_4); Assert.IsTrue(test3_1.Equals(stack3.GetMinimum())); Assert.IsTrue(test3_1.Equals(stack3.Minimum)); stack3.Push(test3_5); Assert.IsTrue(test3_5.Equals(stack3.GetMinimum())); Assert.IsTrue(test3_5.Equals(stack3.Minimum)); #endregion #region StackTest :: #endregion }