简单记录一下floyd算法
一、简述
floyd算法是一种很适合在图中寻找最短路径的算法,其主要思想是寻找最合适的中转站来到达目的地。
二、前提条件
图权值可以为负,但不能有负权值回路,负权值回路可能不存在最短路径
三、算法思路
从起点到终点,如果不能直达,需要经过一个或数个中转点,因此,可以将计算所有节点之间最短距离这个问题转化为借助x个中转点时计算各节点间最短路径
四、简单的代码表示(python):
算法输入为nxn邻接矩阵,n为节点总数
def Floyd(d):
n = d.shape[0]
for k in range(n):
for i in range(n):
for j in range(n):
d[i][j] = min(d[i][j], d[i][k]+d[k][j])
#此步骤比较当前权值与经过点k的权值,选出最小值记为最短路径值
#还可以同时维护一个最短路径表,记录下起点到终点的最短路径
return d
迭代后,重新形成的矩阵d就是最短距离矩阵了
五、小结
floyd算法的精髓,在于起点目标点之间计算不同的中间点带来的影响,添加中间点之后路程更短,就找到了一条更短路径,这属于动态规划的一种算法思想思想