12/12每日总结
  3XDZIv8qh70z 2023年12月23日 15 0


最短路径

BFS求无权图的单源最短路径

简介

直接进行广度优先遍历

使用两个数组,一个记录最短路径值,一个记录到这个顶点的直接前驱

只能用无权图

迪杰斯特拉算法

简介

dijkstra算法是一种一步一步找出最短路径的方法,核心思路就是从初始点开始,一步一步从已确定路径中选取最短的路径作为新的最短路径,并加入新已确定顶点,然后执行多次

实现

我们选用三个数组,分别是标记各顶点是否已找到最短路径的finals,最短路径长度的dist,以及记录路径上的前驱的path

12/12每日总结_最短路径

12/12每日总结_最短路径_02

也就是我们每次将可到达的结点找出来,从可获取路径中找到最短路径,并将其前驱记录,标记出结点

时间复杂度为O(n^2)即O(|V|^2)

如果用于负权值带权图,则迪杰斯特拉算法可能会失效

弗洛伊德算法

简介

Floyd算法是求出每一对顶点之间的最短路径 使用动态规划思想,将问题的求解分为多个阶段

对于个顶点的图G,求任意一对顶点Vi一>Vj之间的最短路径可分为如下几个阶段:#初始:不允许在其他顶点中转,最短路径是? #0:若允许在Vo中转,最短路径是? #1:若允许在Vo、V1中转,最短路径是? #2:若允许在Vo、V1、V2中转,最短路径是? ...... #n-1:若允许在Vo、V1、V2.Vn-1中转,最短路径是?

12/12每日总结_最短路径_03

12/12每日总结_结点_04

例如这样,左边的矩阵就是初始时,不中转获得的个顶点建最短路径长度,右边的矩阵是初始时中转点的记录,因为不中转,所以是-1

若允许在V0中转,则新加一

12/12每日总结_最短路径_05

12/12每日总结_数组_06

编辑

如此经历n轮递推

woc,大道至简,本身以为是只有一个节点做中转的情况,但是仔细一想,它并不是单源的算法,而是点到点的算法,并且也从来不是每次加一个这么简单,他是考虑了所有的结点

就好比是需要经过 0 2 4 6才能到这个点,在查找时0->2是最小值不需要中转,0->4是经过2的中转,0到6是经过4的中转,但是到4的中转前已经中转过2了,所以这种算法已经考虑了所有的情况

DAG

简介

有向无环图简称DAG 图

DAG描述表达式

12/12每日总结_最短路径_07

12/12每日总结_结点_08

相同部分可以合并

12/12每日总结_最短路径_09

12/12每日总结_最短路径_10

节省存储空间

顶点中不能出现重复的操作数,标出来各个运算符的生效顺序,注意分层


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月23日 0

暂无评论

推荐阅读
3XDZIv8qh70z
作者其他文章 更多