A graph represents general relationships between pairs of elements from among a set of elements. The elements are called vertices, and the relationships between them are called edges. The graph algorithms we present do not depend on a particular graph implementation. Instead, they are implemented entirely in terms of the Graph ADT or WeightedGraph ADT. One advantage of this approach is that it allows the presentation and implementation of the graph algorithms to be expressed independent of the underlying graph representation.