Intuition
- finding the shortest path
 - we should consider this for any problem with branching possibilities (along with DFS)
 - for trees, this is a level order traversal
 - for graphs, there will be cycles so create a visited set
 
Implementation
#add visited if we expect a cycle
visited = set()
queue = deque([(start_state, level)])
while queue:
	state, level = queue.popleft()
	if state == what_we_are_looking_for:
		return level
		
	if state in visited:
		continue
	visited.add(state)
	next_state = get_next_state(state)
	queue.append((next_state, level + 1))
 
return -1 #not found
 Visual

