码迷,mamicode.com
首页 > 编程语言 > 详细

最短路径算法专题1----弗洛伊德

时间:2016-03-17 23:59:46      阅读:484      评论:0      收藏:0      [点我收藏+]

标签:

由于最短路径算法我认为比较重要,所以分成几个专题来慢慢细化去磨它,不能一口气吃个胖子嘛。

 

首先在说算法之前,先说清楚什么叫做最短路径。

题目一般会给你一张图,然后告诉你很多地方,然后告诉你各个地方之间的路程有多远,要你求出,两点间的最短距离,注意,题目给出的两点间的距离未必是最短的,可能通过第三个点转换之后达到更短。实际其实也是这样的,有时候两个地方并没有直线的道路只有曲线的绕路。

 

算法的思路:

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----弗洛伊德

标签:

原文地址:http://www.cnblogs.com/linkstar/p/5289846.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!