您的位置:首页 > 其它

我对弗洛伊德算法的理解(求图中任意两点之间最短距离)

2012-10-30 21:56 260 查看
我对弗洛伊德算法的理解(求图中任意两点之间最短距离)
基本过程:
for k = 1:n
    for i = 1:n
         for j = 1:n
             if route(i,k)+route(k,j) < route(i,j)
                  route(i,j) = route(i,k) + route(k,j);
             end
         end
    end
end


预备知识:
最优路径的子路径也是最优路径,即连接两个结点之间的最短路径上任意两个节点之间的路径即为这两点间的最短路径。

基本过程文字描述:
初始:任意两个结点直接连接最短距离
第一步:任意两个结点可借用第一个结点的至多一次间接连接最短距离
第二步:任意两个结点可借用第一第二两个结点的至多二次间接连接最短距离
……

关键问题:
这个操作方法能保证最后得到任意两个节点之间的最短路径吗?又是怎么得到的?
分析:假设a1 a2 a3 ... an 是连接a1到an的最短路径上的所有点,我们用示例说明,弗洛伊德算法是怎样最终求出a1到an的最短路径是a1 a2 ... an的连接(为了简单起见,我们用n=6做示范)。
假若第一个出现的点是a3是最外层循环中第一次出现的点,那么经过里面两层循环可以求出a2到a4的最短路径是a2 a3 a4;假若后面出现的点是a5,那么有a4到a6的最短路径是a4 a5 a6;若再出现的点事a4,那么会求出a2到a6的最短路径是a2 a3 a4 a5 a6;最后只要外层循环出现a2,那么里层循环会求出a1-a2 + a2-a6是a1-a6的最短路径,这样就可以求出a1-a6的最短路径为a1 a2 a3 a4 a5 a6了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: