两者区别
最短路径是解决一个图中从某点出发到图中其他点的最短路径问题
最小生成树是解决用最小的代价将图上的所有点连接起来的问题
js实现
dijkstra实现的最短路径和prim实现的最小生成树代码非常相似:
- dijkstra
1 | /** |
- prim
1 | /** |
补充
最小生成树算法图解释
- kruskal
- 初始化每个顶点为一个树
- 从小到大考察每一条边,如果这一条边是连接两棵树的边,则将两棵树相连,并
组成新的树。重复这一步骤直到考察完所有的边。
- prim
- 任意选择一个顶点作为一个”切割”
- 考察剩余顶点与”切割”的连通情况,选择最小的轻量级边并连接作为新的”切割”。重复这一步骤直到所有的顶点都考察完
单源最短路径
- bellman-ford
- 初始化各点到起点的距离为无穷大
- 从起点开始遍历每一个顶点,更新当前遍历顶点的邻居的最短路径信息(前驱和路径长度),直到所有的顶点遍历完
- dijkstra
略
多源最短路径
- floyd