两种最短路径(测地距离)的算法——Dijkstra和Floyd

本文介绍了图论中的最短路径问题,包括Dijkstra算法和Floyd算法。Dijkstra算法适用于确定起点的最短路径,采用广度优先搜索,时间复杂度为O(N^2)。Floyd算法用于全局最短路径,虽然时间复杂度较高为O(N^3),但能找出任意两点间最短路径。内容还包括两种算法的具体实现和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径。解决最短路的问题有以下算法,Dijkstra算法,Bellman-Ford算法,Floyd算法和SPFA算法等。

最短路径问题是图论研究中的一个经典算法问题,旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:

(1)确定起点的最短路径问题- 即已知起始结点,求最短路径的问题。适合使用Dijkstra算法。

(4)全局最短路径问题- 求图中所有的最短路径。适合使用Floyd-Warshall算法。

Dijkstra算法

又称迪杰斯特拉算法,是一个经典的最短路径算法,主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止,使用了广度优先搜索解决赋权有向图的单源最短路径问题,算法最终得到一个最短路径树。时间复杂度为O(N^2)

实例:

 

 

抽象步骤:

1.将起点A放入集合中,A点的权值为0,因为A->A=0。

2.与起点A相连的所有点的权值设置为A->点的距离,连接不到的设置为无穷。并且找出其中最小权值的B放入集合中(此时A->B必定为最小距离)。

3.与B点相连的所有点的权值设置为B->点的距离,并且找出其中最小权值的C点放入集合中(此时C的权值必定为其最小距离)。

4.重复步骤3,直至所有点加入集合中。便能得到所有点与A点的最短距离。

 

Floyd算法

全称Floyd-Warshall算法,又称佛洛依德算法,是解决任意两点间的最短路径的一种算法,但是时间复杂度比迪杰斯特拉要高,时间复杂度为O(N^3),空间复杂度为O(N^2)。

 

简单案例:


 

算法的思路:

 

 

     通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入两个矩阵,矩阵D中的元素a[i][j]表示顶点i(i个顶点)到顶点j(j个顶点)的距离。矩阵P中的元素b[i][j]表示顶点

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值