数据结构基本概念——求最短路径的算法

本文详细介绍了迪杰斯特拉算法和弗洛伊德算法在寻找图中顶点间最短路径的应用。迪杰斯特拉算法主要用于求解单源最短路径,而弗洛伊德算法则用于解决任意两点间最短路径问题。通过这两个算法的对比,读者可以深入理解它们的工作原理和时间复杂度。

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

迪杰斯特拉算法是求图中某一顶点到其余各顶点的最短路径,如果求图中任意一对顶点间的最短路径,通常使用弗洛伊德算法

1.迪杰斯特拉算法:

设有两顶点集合S和T,集合S中存放图中已找到最短路径的顶点,集合T中存放图中剩余顶点。初始初始状态时,集合S中只包含源点v0然后不断从集合T中选取到顶点v0路径长度最短的顶点vu并入集合S中。集合S每并入一个新的顶点vu,都要修改顶点vo到集合T中顶点的最短路径长度值。不断重复此过程,直到集合1T中的顶点全部并入S为止。时间复杂度是O(n^2)

2.弗洛伊德算法:

1)设置两个矩阵A和Path,初始时将图的邻接矩阵赋值给A,将矩阵Path中的元素全部设置为-1。
2)以顶点k为中间顶点,k取0~n-1(n为图中顶点个数),对图中所有顶点对{i,j}进行如下检测与修改:
如果A[i][j]>A[i][k]+A[k][j],则将A[i][j]改为A[i][k]+A[k][j]的值,将Path[i][j]改为k,否则什么都不做。
弗洛伊德算法的时间复杂度为O(n^3).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值