1. BFSΒΆ

Find the shortest path from |start| to |target| in a unweighted graph G.

neighbor(x) returns the neighbors of x in G.

q = deque([start])
seen = set([start])
steps = 0

while q:
    size = len(q)
    for _ in range(size):
        n = q.popleft()
        if n == target:
            return steps
        for t in neighbor(n):
            if t in seen:
                continue
            q.append(t)
            seen.add(t)
    steps += 1
return -1  # not found