广度优先搜索
,能够找出段数最少的路径。但是不能找出加权图的最短路径。
狄克斯特拉
算法,能够解决加权图中最短路径的问题(即总权数最小的路径)。只适用于有向无环图。且边的权重不能为负(贝尔曼 • 福德算法(Bellman-Ford algorithm)可以解决权重为负的问题)。
在下图中如果采用广度优先搜索就会得到如下最短路径。但这条路并不是耗时最短的路径。下面我我们来看看狄克斯算法的解决思路。
算法思路:
- 找出“最便宜”的节点,即可在最短时间内到达的节点。
- 更新该节点的邻居的开销。
- 重复这个过程,直到对图中的每个节点都这样做了 。
- 计算最终路径 。
根据下面的加权图,求解起点到终点的最短路径。
# 构造数据
graph = {
}
graph["start"] = {
}
graph["start"]["a"] = 6
graph["start"]["b"] = 2
graph