关于Floyd算法 和 Dijkstra算法

本文对比介绍了Floyd和Dijkstra算法在寻找加权图中最短路径的应用。Floyd算法用于找出所有顶点间最短路径,而Dijkstra算法求一点到其他所有顶点的最短路径。通过迭代和递归的方式,两种算法各有特点,Dijkstra算法可用反证法证明其正确性,Floyd算法的正确性则相对较难证明。
摘要由CSDN通过智能技术生成

Floyd和Dijkstra算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路径的算法,不同点在于Floyd算法求加权图中所有顶点之间的最短路径; Dijkstra算法在求一点到其他所有顶点的最短路径

Dijkstra算法:

   依次求距离源点的最短路径,再求还不确定的最小权值时(再求还未确定的顶点),就是从最后确定的最新权值的基础上(从那个顶点出发)遍历与他相连的边,在所有还未确定的顶点中找出最小的权值,即是确定下新的最短路径(最新顶点)

1.假设从D点开始,D为起始点,Visited[D] = 0 遍历与D相连的所有点,发现E最短,但D到BCF的距离也保留下来,保存在一个Visited数组里,E保存在S集合中,表示确定下来的顶点.

2.因为E与D距离最近,第二点从E开始,遍历E,CE为4,EF为5,所以计算D到F距离为6,比3大,所以保留3(如果新计算的权值大于原有的距离,保留新的权值),同理保留DF的3,ED的2因为visited[D] 已经确定下来 ,也因为 visited[D] = 0, visited[E] + 2 肯定>0 ,所以2无效的,  S集合确定下来的顶点不用去遍历了,当然遍历了也没有关系,只是增加了运算的时间

3.确定了DC最近,下一个顶点就从C点出发,遍历C的所有顶点

我们是从原先顶点遍历中找出最短的权值,再与之前的还没确定下来的距离相比,找出最短的距离,确定最新

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值