在网上看大家写的算法详解非常详细、篇幅很长,但是讲来讲去有点绕。
这里对几个经典的算法用尽可能少的几句话概括一下,写代码的时候不容易绕晕。
floyd算法及优化
时间复杂度是O(n**3),代码超级简洁(但运行起来也超慢),会得到所有点两两之间最小距离,python示例代码如下:
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,i,j均为节点的编号,d为距离矩阵,d[i][j]为i点到j点的距离,n为节点总个数)
floyd是动态规划算法,有递推公式:d[i][j]=min(d[i][j],d[i][k]+d[k][j]),注意三重循环k要写外面,里面的i,j是对称的故而顺序没影响。
思路是:对于第1个中间点k1,计算以k1作为中间点时,所有点两两之间的最小距离;对于第2个中间点k2,计算以k2作为中间点时,所有点两两之间的最小距离,如果这个距离比之前的小,就更新d[i][j]的值……如此遍历所有中间点k后,所有d[i][j]都更新到最小值。
floyd