|
Data Structures and Algorithms
with Object-Oriented Design Patterns in C# |
Floyd's algorithm uses the
dynamic programming method
to solve the all-pairs shortest-path problem on a dense graph.
The method makes efficient use of
an adjacency matrix to solve the problem.
Consider an edge-weighted graph
,
where C(v,w) represents the weight on edge (v,w).
Suppose the vertices are numbered from 1 to
.
That is, let
.
Furthermore,
let
be the set comprised of the first k vertices in
.
That is,
, for
.
Let
be the shortest path from vertex v to w
that passes only through vertices in
,
if such a path exists.
That is, the path
has the form
![]()
Let
be the length of path
:
![]()
Since
,
the
paths are correspond to the edges of G:
![]()
Therefore, the
path lengths correspond to the weights on the edges of G:
![]()
Floyd's algorithm computes the sequence of matrices
.
The distances in
represent paths with intermediate vertices in
.
Since
,
we can obtain the distances in
from those in
by considering only the paths that pass through vertex
.
Figure
illustrates how this is done.

Figure: Calculating
in Floyd's algorithm.
For every pair of vertices (v,w),
we compare the distance
,
(which represents the shortest path from v to w
that does not pass through
)
with the sum
(which represents the shortest path from v to w
that does pass through
).
Thus,
is computed as follows:
![]()