1. 简介
广度优先算法可以找出段数最少的路径,但是对于路径上带权重的图,想要找出最快的路径,则需要使用狄克斯特拉算法。
2. 原理
为了说明狄克斯特拉算法的原理,使用换钢琴的的例子来做说明.
假设Rama想拿自己的乐谱换架钢琴:
- Alex说:“这是我最喜欢的乐队Destroyer的海报,我愿意拿它换你的乐谱。
- 如果你再加5美元,还可拿乐谱换我这张稀有的Rick Astley黑胶唱片。”
- Amy说:“哇,我听说这张黑胶唱片里有首非常好听的歌曲,我愿意拿我的吉他或架子鼓换这张海报或黑胶唱片。
- Beethoven惊呼:“我一直想要吉他,我愿意拿我的钢琴换Amy的吉他或架子鼓。”
商品兑换的关系如下:
现在需要确定,Rama如何才能以最少的钱换到他想要的钢琴。
狄克斯特拉算法解决问题的思路主要包括以下四步:
- 找出最便宜的节点,即可用最便宜的价格可前往的节点。
- 对于该节点的邻居,检查是否有前往它们的更短路径,如果有,就更新其开销。
- 重复这个过程,直到对图中的每个节点都这样做了。
- 计算最终路径
下面结合狄克斯特拉的算法步骤,对该问题进行推算。
2.1 找出最便宜的节点
对于乐谱而言,可以直接兑换唱