# CSPT19 Lecture 13 ``` class Graph: def __init__(self): self.graph = {} def __repr__(self): return str(self.graph) def addNode(self, value): if value not in self.graph: self.graph[value] = set() def removeNode(self, value): if value in self.graph: self.graph.pop(value) for otherNode in self.graph: if value in self.graph[otherNode]: self.graph[otherNode].remove(value) 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): return toNode in self.graph[fromNode] def dft(self, startingNode): stack = deque() stack.append(startingNode) visited = set() traversalList = [] while len(stack) > 0: currNode = stack.pop() if currNode not in visited: traversalList.append(currNode) visited.add(currNode) for neighbor in self.adjList[currNode]: stack.append(neighbor) print(traversalList) def recursiveDFT(self, startingNode): visited = set() self.recursiveDFTHelper(startingNode, visited) def recursiveDFTHelper(self, currNode, visited): visited.add(currNode) print(currNode) for neighbor in self.adjList[currNode]: if neighbor not in visited: self.recursiveDFTHelper(neighbor, visited) def bft(self, startingNode): queue = deque() queue.append(startingNode) visited = set() while len(queue) > 0: currNode = queue.popleft() if currNode not in visited: print(currNode) visited.add(currNode) for neighbor in self.graph[currNode]: queue.append(neighbor) def bfs(self, startingNode, goalNode): queue = deque() visited = set() visited.add(startingNode) queue.append([startingNode]) while len(queue) > 0: currPath = queue.popleft() currVertex = currPath[-1] if currVertex == goalNode: return currPath for neighbor in self.graph[currVertex]: if neighbor not in visited: visited.add(neighbor) newPath = currPath.copy() newPath.append(neighbor) queue.append(newPath) myGraph = Graph() myGraph.addNode(1) myGraph.addNode(2) myGraph.addNode(3) myGraph.addNode(4) myGraph.addEdge(1, 2) myGraph.addEdge(1, 3) myGraph.addEdge(2, 4) myGraph.addEdge(3, 4) myGraph.addEdge(4, 1) print(myGraph.bft(1)) ```