求最短路径的几种算法
弗洛伊德(暴力)
此算法同冒泡排序相似,代码简单但时间复杂度高。
如上图(选自《啊哈!算法》),数字代表城市,箭头代表城市之间的距离,并且是单向箭头求各个城市之间的最短路径。
我们可以假设现在允许通过城市1,那么城市3到城市2的距离就变成9,以此类推。
代码实现:
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
{
if(e[j][k]>e[j][1]+e[1][k])
e[j][k]=e[j][1]+e[1][k];
}
}
接下来类比,假设可以通过城市2,与上面相同;不难看出我们只需要在外面再加一层循环即可实现所有假设。
这就是此代码的核心部分:
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
if(e[j][k]>e[j][i]