Shortest-path tree

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

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 (i.e. where there are no negative-length cycles), we may construct a shortest-path tree using the following algorithm:

  1. Compute dist(u), 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(pu) + edge_dist(pu,u) = dist(u). 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.

See also[edit]


Cahn, Robert S. (1998). Wide Area Network Design: Concepts and Tools for Optimization. Networking. Morgan Kaufmann. ISBN 978-1558604582.