Dijkstra算法
\(Dijkstra\ algorithm\)
\(Principle\)
\(Implementation\ step\)
- 将起点标记;
- 找条连接被标记的点集合中一点和没有被标记的点集合中一点最短的边;
- 将该边连接的没有被标记的点加入被标记的点;
- 将该新加入的被标记的点和它的所有邻接点进行松弛操作;
- 返回第二步,直到\(n\)个点都被标记为止。
- 时间复杂度:\(O(n^2)\)
\(Template\ code\)
\(Optimize\)
-
\(dis[i]\)会随着松地操作更新,因此是动态求最小值,考虑优先队列优化:
- 用优先队列维护没有标记的点,且是小根堆
-
时间复杂度:\(O(m\log n)\)
\(Code\)
- 这份代码里面使用了
重载运算符(Overload operator)
- 重载运算符:
- \(Over\):覆盖
- \(Load\):加载
- \(Overload\):重载
- \(Operator\):运算符。
- 重载运算符是指将运算符(加减乘除等)修改为自定义的含义
- 重载运算符:
\(Dijkstra's\ relationship\ with\ BFS\)
- \(BFS\) 是边权相同的 \(Dijkstra\)
\(Matters\ needing\ attention\)
-
不能应用于有负边权的图;
-
不能跑最长路;
-
注意松弛操作溢出
-
多次调用\(Dijkstra\)要重置\(vis[]\)和\(dis[]\)
__EOF__

本文作者:wbw121124
本文链接:https://www.cnblogs.com/wbw121124/p/17991272.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/wbw121124/p/17991272.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】