pred[1...n] = [null, null, ..., null]
state[1...n] = [unseen, unseen, ..., unseen]
dist[1...n] = [infty, infty, ..., infty]
def BFS(V[1..n], adjlist[1..n], start:
# Initialize stuff for the start
q = new queue
state[start] = seen
dist[start] = 0
q.enqueue(start)
# Do the actual BFS
while q is not empty:
u = q.dequeue()
for v in adjlist[u]:
if state[v] == unseen:
pred[v] = u
state[v] = seen
dist[v] = dist[u] + 1
q.enqueue[v]
state[u] = complete