本文将说明最短路径问题中的Floyd算法原理,以及如何用MATLAB实现。
正文
在这幅图中,如果我想知道任意两个点之间的最短距离,有什么好的办法吗?Floyd算法了解一下。
在这个问题中,相邻两个点是“单向”的,也就是说从A点到B点的距离,和从B点到A点的距离不一定相等。Floyd算法可以用来解决这样的单向问题。当然,还有“双向”问题,及相邻两地的距离是固定的,无论出发地是哪个。双向问题显然是单向问题的特例,然而有的算法只能解决双向问题,因此在这里表扬一下Floyd的普适性。
如果我们要从A点到B点,却被禁止中途经过任何其他的点作为中转站的话,我们就只好从A点直接走向B点了。这种情况下的两地最短距离是显而易见的——就是它俩的直接距离嘛。我们规定一下,如果A地点和B地点不相邻的话,那么它俩的直接距离就是无穷大。还有,A点到A点的直接距离是0。
然后我们就可以画一个表格(其实就是之后要用代码建立的矩阵)。就一开始说的这个图而言,我们可以画出如下的表格(表中行号和列号都代表地点的编号。
)。
表格1: