最短路径算法
弗洛伊德
迪杰斯特拉
图G(V,E) V是点集,E是边集。
S 是已求出最短路径的顶点集合
U 是V-S。
未优化
-
初始时S只包含源点,即S={v},顶点v到自己的距离为0。U包含除v以外的其他顶点,v到U中顶点i的距离为其边上的权值(两点可达)或者为∞(两点不可达)。
-
从U中选取一个顶点u,顶点v到顶点u的距离最小,然后把顶点u加入到S中。
-
以顶点u为新考虑的中间点,修改顶点v到U中各顶点的距离:若从源点v到顶点j(j是U中的点)经过顶点u的距离(
dis[u]+weight[u][j]
)比原来不经过顶点u的的距离(dis[j]
)短,则修改从顶点v到顶点j的最短距离值(dis[j]=dis[u]+weight[u][j]
) -
重复上述步骤2和3,直到S=V为止。
优先队列优化
优先队列优化的点在于上述步骤中的第二步,优先队列维护一个小顶堆,使得每次都能快速地选出顶点v。
当然,具体实现还有一些不一样的地方,我没有展开说。
待续...
SPFA
待续...
本文作者:请去看诡秘之主
本文链接:https://www.cnblogs.com/xjy881/p/16366597.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步