我对弗洛伊德算法的理解(求图中任意两点之间最短距离)
2012-10-30 21:56
260 查看
我对弗洛伊德算法的理解(求图中任意两点之间最短距离)
基本过程:
预备知识:
最优路径的子路径也是最优路径,即连接两个结点之间的最短路径上任意两个节点之间的路径即为这两点间的最短路径。
基本过程文字描述:
初始:任意两个结点直接连接最短距离
第一步:任意两个结点可借用第一个结点的至多一次间接连接最短距离
第二步:任意两个结点可借用第一第二两个结点的至多二次间接连接最短距离
……
关键问题:
这个操作方法能保证最后得到任意两个节点之间的最短路径吗?又是怎么得到的?
分析:假设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了。
基本过程:
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了。
相关文章推荐
- 任意两节点之间最短距离
- 图论02——任意两点间最短距离及路径
- Floyd-Warshall算法--求任意两点最短距离
- 任意两点之间最短路径
- 给定地球上两点的经纬度,求两点之间沿地球表面最短的弧线距离
- 图论03——改进的任意两点间最短距离及路径
- HDU2586(LCA应用:在带权树中求任意两点之间的距离)
- 迪杰斯特拉算法 计算两点之间最短距离
- c++递归实现关于无向图中任意两点的最短距离
- 最短路径问题平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。
- hdu 2376(求树上任意两点之间距离之和的平均值)
- ★1007 给定一些点求两点之间的最短距离
- HDU 4460 求任意两点最短距离的最大距离
- 菜鸟上路 杭电OJ 1007 求平面上两点之间最短距离--分而治之以及关键点的考虑
- 计算地球表面任意两点之间的距离
- 两点之间最短的距离并不一定是直线(改变一生财运的五句话)
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- 已知有向图任意两点的最短距离,求最小边数
- hdu 2376(求树上任意两点之间距离之和的平均值)
- hdu 2544 最短路 图论-求两点之间的最短距离 Dijkstra