def breadth_first_search(graph, start):
    """Traverse a graph using BFS.
    
    Args:
        graph (Graph): Graph to traverse. 
        start (Node): Starting node.
    
    Returns:
        A dictionary mapping strings to search results.
        
        {"depth": int,
         "reachable_nodes": Node list"}
         
    """
    
    # stuff to track
    visited = []
    queue = []
    
    # by default, start is part of visited and queue
    visited.append(start)
    queue.append(start)
    
    # do BFS
    while(len(queue) > 0):
        next_node = queue.pop(0)
        
        for neighbor in graph.get_edges(next_node):
            if neighbor not in visited:
                queue.append(neighbor)
        
        visited.append(next_node)
        
    # print results
    return {"reachable_nodes": visited}