Floyed算法
定义Floyd-Warshall 算法用来找出每对点之间的最短距离。它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来得到最佳路径。 注意单独一条边的路径也不一定是最佳路径。
思想
从任意一条单边路径开始。所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连。
对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
实现Pascal程序:
for i:= 1 to n do
for j:= 1 to n do
read(f[i,j]);
for k:= 1 to n do
for i:= 1 to n do
for j:= 1 to n do
if (i<>j)and(i<>k)and(j<>k)and(f[i,k]+f[k,j]<f[i,j]) then
f[i,j]:=f[i,k]+f[k,j];
总评时间复杂度O(n^3),只要有存下邻接矩阵的空间,时间一般没问题,并且不必担心负权边的问题。