Shortest-path tree


Given a connected, undirected graph G, a shortest-path tree rooted at vertex v is a spanning tree T of G, such that the path distance from root v to any other vertex u in T is the shortest path distance from v to u in G.
In connected graphs where shortest paths are well-defined, we may construct a shortest-path tree using the following algorithm:
  1. Compute dist, the shortest-path distance from root v to vertex u in G using Dijkstra's algorithm or Bellman–Ford algorithm.
  2. For all non-root vertices u, we can assign to u a parent vertex pu such that pu is connected to u, and that dist + edge_dist = dist. In case multiple choices for pu exist, choose pu for which there exists a shortest path from v to pu with as few edges as possible; this tie-breaking rule is needed to prevent loops when there exist zero-length cycles.
  3. Construct the shortest-path tree using the edges between each node and its parent.
The above algorithm guarantees the existence of shortest-path trees. Like minimum spanning trees, shortest-path trees in general are not unique.
In graphs for which all edges weights equal one, shortest path trees coincide with breadth-first search trees.
In graphs that have negative cycles, the set of shortest simple paths from v to all other vertices do not necessarily form a tree.