介绍其他狄克斯特拉算法使用示例前,先来澄清一些术语。
狄克斯特拉算法用于每条边都有关联数字的图,这些数字称为权重(weight)。
要计算非加权图中的最短路径,可使用广度优先搜索。要计算加权图中的最短路径,可使用狄克斯特拉算法。图还可能有环,而
环类似这样。
这意味着你可从一个节点出发,走一圈后又回到这个节点。假设在下面这个带环的图中,你要找出从起点到终点的最短路径。
绕环前行是否合理呢?你可以选择避开环的路径。
也可选择包含环的路径。
这两条路径都可到达终点,但环增加了权重。如果你愿意,甚至可绕环两次。
但每绕环一次,总权重都增加8。因此,绕环的路径不可能是最短的路径。
最后,还记得第6章对有向图和无向图的讨论吗?
无向图意味着两个节点彼此指向对方,其实就是环!
在无向图中,每条边都是一个环。狄克斯特拉算法只适用于有向无环图(directed acyclicgraph, DAG)。