最短路径算法专题1----弗洛伊德
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路径算法专题1----弗洛伊德相关的知识,希望对你有一定的参考价值。
由于最短路径算法我认为比较重要,所以分成几个专题来慢慢细化去磨它,不能一口气吃个胖子嘛。
首先在说算法之前,先说清楚什么叫做最短路径。
题目一般会给你一张图,然后告诉你很多地方,然后告诉你各个地方之间的路程有多远,要你求出,两点间的最短距离,注意,题目给出的两点间的距离未必是最短的,可能通过第三个点转换之后达到更短。实际其实也是这样的,有时候两个地方并没有直线的道路只有曲线的绕路。
算法的思路:
1、用二维数组列出所有的距离,达到不了的用最大距离表示,如9999999
2、循环数组上面的每一个点,因为数组上面的一个点就代表了两点之间的现在距离,如map【3】【2】表示2到3的距离,然后对于这个点,尝试在其中插入一个点使其距离缩短,如map【3】【1】 + map【1】【2】< map【3】【2】表示,先走3到1再走1到2会比直接从3到2更近,然后更新map
3、最后输出任意两点间的距离
算法的要点:
1、三层循环,第一层,中间插入的点,二三层,地图上面的任意点
2、if(map【3】【1】 + map【1】【2】< map【3】【2】)map【3】【2】= map【3】【1】 + map【1】【2】;
3、达到不了的用最大距离表示,如9999999,那么就有可能出现两个9999999相加和点比较的情况,那么久要在if中间判断是否有无穷大的值存在,如果存在不需要更新
算法的使用:
1、时间复杂度显而易见O(N^3);
2、如果要求写出全部的任意两点最短,用这个算法可行。
3、数据范围小的话,时间要求不高,这个算法的编码速度最快,简单的说就是解题速度很快,代码量小。
顺便说一下,这个算法里面有动态规划的思想在里面,简单的说就是,动态的去更新已有的值,让解慢慢优化。
以上是关于最短路径算法专题1----弗洛伊德的主要内容,如果未能解决你的问题,请参考以下文章
图(最短路径算法————迪杰斯特拉算法和弗洛伊德算法).RP
【数据结构】最短路径之迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法