Find all active/reachable nodes in a graph.
Asked in the Round 1 stage. Treat the graph as directed and represented by an adjacency-list dictionary. Return every node reachable from start, including start, in BFS visitation order. Each node should appear once. Reported follow-up: If there are two connected components, find the nodes and edges that need to be added to make the graph connected.
graph is a dictionary mapping node identifiers to lists of neighboring node identifiers. start is a node in graph. Return a list of reachable node identifiers.
def reachable_nodes(graph, start):