---
# System prepended metadata

title: CSPT17 Lecture 11

---

# CSPT17 Lecture 11
# Depth-first
```
adjList = {
    1: {2, 3},
    2: {4},
    3: {4},
    4: {1}
}

def dftRecursive(startingNode, graph):
    visited = set()
    dftRecursiveHelper(startingNode, graph, visited)
    
def dftRecursiveHelper(node, graph, visited):
    visited.add(node)
    print(node)
    for neighbor in graph[node]:
        if neighbor not in visited:
            dftRecursiveHelper(neighbor, graph, visited)

def dfsIterative(startingNode, destinationNode, graph):
    stack = deque()
    stack.append(startingNode)
    visited = set()
    
    while len(stack) > 0:
        currNode = stack.pop()
        if not currNode in visited:
            visited.add(currNode)
            if currNode == destinationNode:
                print('found node')
                return
                
            for neighbor in graph[currNode]:
                stack.append(neighbor)
```

# Breadth-first
```
def bfs(graph, startingNode, destinationNode):
    queue = deque()
    visited = set()
    visited.add(startingNode)
    queue.append(startingNode)
    while len(queue) > 0:
        currNode = queue.popleft()
        print(f"visiting node {currNode}")
        if currNode == destinationNode:
            print(f"found the destination node {currNode}")
            return currNode
        for neighbor in graph[currNode]:
            if neighbor not in visited:
                visited.add(neighbor)
                queue.append(neighbor)
```