最短路径算法

本文介绍了最短路径问题及其两种常见算法:Floyd算法和Dijkstra算法。Floyd算法通过逐步增加路径中允许经过的节点来找到所有节点对之间的最短路径,而Dijkstra算法则用于解决单源最短路径问题,按照最短路径长度递增的顺序确定每个节点的最短路径。
摘要由CSDN通过智能技术生成

参考博客:最短路径—Dijkstra算法和Floyd算法

最短路径算法

最短路径问 题。即寻找图中某两个特定结点间最短的路径长度。所谓图上的路径,即从图中 一个起始结点到一个终止结点途中经过的所有结点序列,路径的长度即所经过的边权和。

Floyd算法

Floyd算法又被称为佛洛依德算法,其算法思路如下:
用邻接矩阵保存原图,那么此时邻接矩阵中 edge[i][j]的值即表示从结点 i 到 结点j,中间不经过任何结点时距离的最小值(若它们之间有多条边,取最小权值保存至邻接矩阵;也可能为无穷,即不可达)。
假设结点编号为 1 到 N,考虑从结点i 到结点j 中间只能经过编号小于等于1的结点(也可以不经过)时最短路径长度。与原始状况相比,在中间路径上可以经过的结点增加了编号为1 的结点。又知最短路径上的结点一定不会出现重复(不考虑存在负权值的情况)。那么,某两个结点间若由于允许经过结点 1 而出现了新的最短路径, 则该路径被结点 1 分割成两部分:由 i 到结点 1,同时中间路径上不经过结点 1 的第一段路径;由结点 1 到 j,中间路径上同样不经过结点 1 的第二段路径,其 路径总长度为edge[i][1] + edge[1][j]
要确定该路径是否比不允许经过结点1时更短,比较edge[i][1] + edge[1][j]edge[i][j]之间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值