Dijkstra、Floyd、Kruskal、Prime算法是图论中四个比较基础的算法,刚入门时较容易混淆,故总结如下(本文只是对比总结,具体示例代码引自其他博客)
带权图分为有向和无向,无向图的最短路径又叫做最小生成树,有prime算法和kruskal算法;有向图的最短路径算法有dijkstra算法和floyd算法。
适用场景
- Dijkstra:单源最短路,求给定起点到所有其他点的最短路径。采用的是贪心的思想,路径不能有负权(带负权用Bellman-Ford算法)
- Floyd:多源最短路径(即任意两点之间的最短路,当然也可以对每个节点使用Dijsktra算法)。采用动态规划思想(递归式 d[i][j] = min(d[i][j], d[i][k] + d[k][j])),路径不可以带负权
- Kruskal、Prime:最小生成树。采用贪心思想
Dijkstra和Prime对比
同:都是贪心的思想