在一个给定的图中求两个顶点的最短路径的算法一直是比较常用和比较重要的算法。主要的求最短路径的算法有Floyd算法、Dijkstra算法和Bellman-Ford算法等等,本篇我们先来看一下Floyd算法:
首先我们知道,要求一个图中两个顶点中的最短路径,除了计算出这两个顶点的直接路径,还可以借助其他的顶点作为“跳板”,
来看看能不能使得这两点的路径变短,来看一个例子:
假设这是一个给定的无向图图,图中共有4个顶点(A、B、C、D),
图中的边共有:A-->B(10)、A-->C(2)、C-->B(6)、C-->D(1)、D-->B(2)五条边(严格来说有10条边,因为是无向图),
顶点C和顶点B相连:A-->C-->B的距离一共是8,明显比顶点A直接到顶点B更短。
再观察一下,我们还可以发现顶点C和顶点D直接相连,D顶点和顶点B直接相连:A-->C-->D-->B的距离一共是5,又是一条更短的路径!
之后我们找不到顶点A到顶点B还有比距离5更短的路径了,那么,在这个图中顶点A到顶点B的最短路径就是5
在上面的那个简单的例子中,求顶点A到顶点B的最短路径,我们正是利用了其他的顶点作为“跳板”,来寻找是否有更短的路径,Floyd算法的核心思想也正是这个:借助图的其它顶点来求目标顶点之间的最短路径
对于上面的例子,假设顶点A为1号顶点,顶点B为2号顶点,顶点的总数为n,e[n][n]为图的邻接矩阵。那么我们可以用代码来描述刚刚的过程:
for(int i = 1; i <= n; i++)
{
if(e[1][2] > e[1][i] + e[i]

本文介绍了一种常用的求解图中两点间最短路径的算法——Floyd算法,并通过实例详细解释了其工作原理及实现过程。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



