Graphs
Shortest Path (Unweighted, via BFS)
BFS explores a graph layer by layer, so the first time it reaches a vertex
is along a shortest path. Track dist[v] and parent[v] while exploring,
then walk parents back from the target to reconstruct the route.
Algorithm
On the canonical graph from graph-adjacency-list, the shortest path from
1 to 6 is [1, 2, 4, 5, 6] with distance 4. The path is rebuilt from
parent: 6 -> 5 -> 4 -> 2 -> 1, reversed.
Basic Implementation
basic.py
from collections import deque
adj = {
1: [2, 3],
2: [1, 4],
3: [1, 4],
4: [2, 3, 5],
5: [4, 6],
6: [5],
}
src, dst = 1, 6
dist = {src: 0}
parent = {src: None}
queue = deque([src])
while queue:
v = queue.popleft()
for nb in adj[v]:
if nb not in dist:
dist[nb] = dist[v] + 1
parent[nb] = v
queue.append(nb)
path = []
node = dst
while node is not None:
path.append(node)
node = parent[node]
path.reverse()
print(path)
print(dist[dst])
Complexity
- Time: O(V + E)
- Space: O(V)
Implementation notes
- Python: a
distdict doubles as the visited check (a vertex is discovered oncedisthas it), andparentrecords the predecessor. - The replay shows
dist,parent, and the queue filling in, then the reconstructed path, matching the lesson spec.
layers equal distance
BFS order equals distance in an unweighted graph.