1.Dijkstra算法
首先需要了解算法的基本思想
如图:
朴素Dijkstra代码
2.优化版Dijkstra算法
朴素版本的Dijkstra算法时间复杂度为O(n^2),而在寻找最小距离的时候可以采用小根堆对寻找过程进行优化
优化版Dijkstra代码
细节
- dijkstra算法保证一个点只会出队一次,这样时间复杂度才是O(mlog(n)).
- dijkstra算法依靠的是贪心策略,即要使用该算法就必须确保起点是最短路,每次都用最短的距离更新其它的点.
因此一些题目中的过程分析中需要分析适用情况(其中Acwing.341题最优贸易 可以很好的体现)
由于该题所要求解的问题的特殊,无法用dijkstra算法,可以通过该题进一步的加深对算法的理解
如图:
3.bellman-ford算法
算法思想如图:
有限制边数bellman-ford代码
太强了呀哥