class DFS(Search): def __initialize_DFS(self, wanted_node): self.__stack = Stack() self.visited_nodes = [] self.wanted_node = wanted_node def __is_new_node(self, node): return not node in self.visited_nodes and not self.__stack.contains( node) def __add_children(self, node): for node in self.graph.graph[node]: if self.__is_new_node(node): self.__stack.push(node) def __call_recursive_DFS(self, node): self.visit(node) if self.is_wanted_node(node): return self.__add_children(node) self.__call_recursive_DFS(self.__stack.pop()) def DFS(self, wanted_node, starting_node=1): self.__initialize_DFS(wanted_node) if self.has_not_found_exception(): return self.__call_recursive_DFS(starting_node) return self.print_path()
def dfs(self,vertex): seen = set() s = Stack() s.push(self.startVertex) while not s.empty(): v = s.pop() if vertex == v: print("Vertex Found") return seen.add(v) adjList = self.graph[v] for w in adjList: if w not in seen and not s.contains(w): s.push(w) print("Vertex not found") return
def test_contains(self): stack = Stack() stack.push("Ned") self.assertFalse(stack.contains("Bao")) self.assertTrue(stack.contains("Ned"))
from Stack import Stack from Queue import Queue s = Stack() s.push(1) s.push(2) s.push(3) q = Queue() q.add(1) q.add(2) q.add(3) print("Stack 'contains' tests: %r, %r, %r, %r" % (s.contains(0), s.contains(1), s.contains(2), s.contains(3))) print("Queue 'contains' tests: %r, %r, %r, %r" % (q.contains(0), q.contains(1), q.contains(2), q.contains(3))) s.pop() s.pop() s.pop() print("Empty stack 'contains' test: %r" % s.contains(4)) q.remove() q.remove() q.remove() print("Empty queue 'contains' test: %r" % q.contains(4))
class TestStack(unittest.TestCase): def setUp(self): self.instance =Stack() def testClear(self): self.instance.clear() self.assertEqual(0,self.instance.size) self.assertEqual([],self.instance.Stack) def testContain(self): self.assertFalse(self.instance.contains('string')) self.assertFalse(self.instance.contains('')) self.assertFalse(self.instance.contains(None)) self.instance.push("string1") self.instance.push("string2") self.instance.push("string1") self.assertTrue(self.instance.contains("string1")) def testPeek(self): self.assertRaises(StackException,self.instance.peek) self.instance.push("string1") self.instance.push("string2") self.assertEqual("string2",self.instance.peek()) self.assertEqual(2,self.instance.size) self.assertEqual(["string1","string2"],self.instance.Stack) def testPush(self): self.instance.push("string1") self.instance.push("string2") self.instance.push("string3") self.assertEqual(["string1","string2","string3"],self.instance.Stack) self.instance.push("") self.instance.push("") self.assertEqual(["string1","string2","string3","",""],self.instance.Stack) self.instance.push(None) self.instance.push("string1") self.assertEqual(["string1","string2","string3","","",None,"string1"],self.instance.Stack) def testPop(self): self.assertRaises(StackException,self.instance.pop) self.instance.push("string1") self.instance.push("string2") popvalue= self.instance.pop() self.assertEqual(["string1"],self.instance.Stack) self.assertEqual(1,self.instance.size) self.assertEqual(popvalue,"string2") popvalue= self.instance.pop() self.assertEqual([],self.instance.Stack) self.assertEqual(0,self.instance.size) self.assertEqual(popvalue,"string1") self.assertRaises(StackException,self.instance.pop) def testIsEmpty(self): self.assertTrue(self.instance.isEmpty()) self.instance.push("string1") self.assertFalse(self.instance.isEmpty()) self.instance.pop() self.assertTrue(self.instance.isEmpty())