Modified Search Problem: Find Path

  • Modify BFS/DFS to find a path between a source and every reachable vertex.

Idea: To produce a path for each vertex, keep track of the vertex from which it was explored during the BFS/DFS process.

The demo here uses BFS, but we could do the same with DFS!

Demo

The following pseudocode describes the BFS algorithm.

// Pre: "s" is the source vertex
explored = {}
explored[s] = true 
queue.enqueue(s)
while (!queue.empty())
    v = queue.dequeue()
    for (w in adjacency[v])
        if (!explored[w])
            explored[w] = true    
            queue.enqueue(w)

Exercise Modify it to include and update the previous collection according to the demo.

Solution
previous = {}
explored = {}
explored[s] = true 
queue.enqueue(s)
while (!queue.empty())
    v = queue.dequeue()
    for (w in adjacency[v])
        if (!explored[w])
            explored[w] = true    
            queue.enqueue(w)
            previous[w] = v

Exercise Assuming the modified BFS produced the previous collection. Use previous to print out a path from the source to any given vertex.

Solution
// Pre: target is reachable from source
node = target
stack.push(node)
while (node != source)
   node = previous[node]
   stack.push(node)

print stack