Graph traversal algorithms: Breadth First Search