zoukankan      html  css  js  c++  java
  • 最短路径算法专题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、数据范围小的话,时间要求不高,这个算法的编码速度最快,简单的说就是解题速度很快,代码量小。

    顺便说一下,这个算法里面有动态规划的思想在里面,简单的说就是,动态的去更新已有的值,让解慢慢优化。

  • 相关阅读:
    树莓派3(Raspbain系统)安装.net环境
    CSS3实现鼠标悬停扩展效果
    WINIO64位模拟键鼠操作
    json在线校验
    阿里云ali-oss图片增加水印
    babel使用中不想使用 严格模式 如何去除?
    记录移动端html界面中底部输入框触发焦点时键盘会把输入框遮挡的问题
    nodejs 项目,请求返回Invalid Host header问题
    css如何画出类似原生的线条?
    js回到顶部 动画速度 (自己记录)
  • 原文地址:https://www.cnblogs.com/linkstar/p/5289846.html
Copyright © 2011-2022 走看看