public static bool ExistsPathOPT2(Graph<int> graph, int start, int destination) { var nodes = graph.Nodes; foreach (var node in nodes) { node.NodeState = State.Unvisted; } var discovered = new Stack<Node<int>>(); var currentNode = graph.FindNode(start); currentNode.NodeState = State.Visited; discovered.Push(currentNode); while (discovered.Count > 0) { currentNode = discovered.Pop(); foreach (var node in currentNode.Neighbors) { if (node.NodeState.Equals(State.Unvisted)) { node.NodeState = State.Visited; if (node.Value.Equals(destination)) return true; discovered.Push(node); } } } return false; }