标签:
今天继续加上最短路径的算法学习------floyd算法
2.floyd算法,(罗伯特·弗洛伊德)-----各个顶点间的最短路径
求的是在一个图中,各个顶点间的最短路径。
算法描述
1)算法思想
各个顶点间的最短路径的情况,不外乎,两种情况。一是,点点相连,另一是,通过若干个中间点相连。因此,对于每个顶点来说,就直接点,判断在点u,v之间,如果插入k会不会使路径更短,如果是,就把值传递过去。不是,就不变。对于每个点都这么的去判断每两个点间的插入情况就行了。
2)算法步骤
a.初始化,首先把,数组矩阵建立好,点到自己的赋值0,不能到的赋值MAX,能到的根据输入值。
b.使用三个for循环,第一个for控制的是插入点,第二个for和第三个for控制的是u,v。然后判断(假设数组S),S[u][v]>S[u][k]+S[k][v] (赋值为MAX就是在这里考虑的) 是否成立。
3)算法心得
看了很多人的一些自己感悟,看了挺多,然后自己参悟。其中有一点,最让我无语的就是那个图了,干嘛那么说,让人绕了一大圈。那张图,说把第K行第K列和对角线划掉,在这上面的的值是不会变的,其他的值会变,会变的就是变成了更短的路径了。其实那个K就在那个时候的插入点,来判断如果在u和v之间,加入K会不会更短。而第K行,第K列,都有K自身,上面初始化的时候,把点到自己的赋值为0,就是这个考虑,直接S[k][v]>0+S[k][v],这就是原来的,所以不变。
标签:
原文地址:http://www.cnblogs.com/psurge/p/4703258.html