这是您找到的算法如何处理示例问题的说明。
问题是在沿途累积成本不应超过 的额外条件下,找到两者node one之间的最短路径。node four7
我们想要找到的解决方案是首先从node one到节点node two,距离为190,成本为4。然后从node two使用node four距离195和成本的路径出发3。总而言之,路径的距离为385,成本为7。
步骤1
那么算法是如何找到这个的呢?第一步是minArray(i,j)像您所做的那样设置矩阵。数组的元素(i,j)包含您必须经过的距离才能到达节点j,并且正好有i剩余的钱。

一开始没有访问过的元素,因为我们从“monies”开始node one,7所以左上角的元素设置为零。上表中的空格对应infinity于数组中设置的值。
第2步
接下来,我们找到数组的最小值,这是 position 处的零(remaining money, node) = (7,1)。该元素设置为(使用与 相同大小visited的矩阵跟踪元素的状态),这意味着我们选择了。现在,所有连接到的节点都通过遍历相应的边来更新值。visitedArrayminArraynode onenode one

这minArray(6,3) = 191意味着我们已经走了一段距离191才能到达,node three而我们剩下的钱是6因为我们已经支付了1到达那里的费用。以同样的方式minArray(3,2)设置为190。红色方块标记该元素(7,1)已被访问。
第 3 步
现在我们再次找到最低的未访问元素(即minArray(3,2) = 190),将其设置为visited并更新所有连接到它的元素。这意味着距离累加,剩余的钱是通过从当前值中减去成本来计算的。

请注意,返回node onefrom太昂贵了node two。
第4步
下一步,选择minArray(6,3) = 191看起来像这样。

第 5 步
三步后,数组看起来像这样。这里选择了两个相等的元素382和一个相等的元素383。请注意,元素的值仅在改进(即低于)当前值时才更新。

第 6 步
数组继续填充,直到所有元素都被访问或仍然具有无限值。

最后一步
最后一步是通过找到第四列的最小值来找到总距离。我们可以看到,最小值minArray(0,4) = 385对应于正确的解决方案。
注意:如果第四列的所有值都是无限的,则意味着没有有效的解决方案。该算法还指定如果在第四列中有多个相等且最小距离的值,则选择最便宜的一个。