>
<p>The job of recording the predecessors is quite simple. When Dijkstra's
algorithm relaxes an edge (potentially adding it to the shortest-paths tree) we
record the source vertex as the predecessor of the target vertex. Later, if the
edge is relaxed again the predecessor property will be overwritten by the new
predecessor. Here we use the <tt>put()</tt> function associated with the
property map to record the predecessor. The <tt>edge_filter</tt> of the visitor
tells the algorithm when to invoke the <tt>ex