如果有这么一个问题,已知各顶点之间的距离,如下图:
我们需要求每对顶点之间的最短距离,可以使用Floyd算法。
Floyd算法原理如下:
1,从任意一条单边路径开始。所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大。
2,对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比已知的路径更短。如果是更新它。
首先,把上图转为对应的数据结构。计算机存储图常用相邻矩阵和邻接表,这里使用相邻矩阵,转换而来的相邻矩阵是这样的:
其中,表中红色的5表示V0到V1的距离为5,而∞则表示a点无法直接到达b点。在C#中用二维数据表示: