# CSPT23 Lecture 13 ## Sandbox ``` from collections import deque class Graph: def __init__(self): self.graph = {} def __repr__(self): return str(self.graph) def addNode(self, node): if node not in self.graph: self.graph[node] = set() def removeNode(self, node): if node in self.graph: self.graph.pop(node) for otherNode in self.graph: if node in self.graph[otherNode]: self.graph[otherNode].remove(node) def addEdge(self, fromNode, toNode): self.graph[fromNode].add(toNode) def removeEdge(self, fromNode, toNode): self.graph[fromNode].remove(toNode) def edgeExists(self, fromNode, toNode): if fromNode not in self.graph: return False return toNode in self.graph[fromNode] def bft(self, startingNode): queue = deque() queue.append(startingNode) visited = set() while len(queue) > 0: curr = queue.popleft() if curr not in visited: visited.add(curr) print(curr) for neighbor in self.graph[curr]: queue.append(neighbor) def dftIterative(self, startingNode): stack = deque() stack.append(startingNode) visited = set() while len(stack) > 0: curr = stack.pop() if curr not in visited: visited.add(curr) print(curr) for neighbor in self.graph[curr]: stack.append(neighbor) def dftRecursive(self, startingNode): visited = set() self.dftRecursiveHelper(startingNode, visited) def dftRecursiveHelper(self, node, visited): visited.add(node) print(node) for neighbor in self.graph[node]: if neighbor not in visited: self.dftRecursiveHelper(neighbor, visited) graph = Graph() graph.addNode(1) graph.addNode(2) graph.addNode(3) graph.addNode(4) graph.addEdge(1, 2) graph.addEdge(1, 3) graph.addEdge(2, 4) graph.addEdge(3, 4) graph.addEdge(4, 1) graph.bft(1) ```