这是您找到的算法如何处理示例问题的说明。
问题是在沿途累积成本不应超过 的额外条件下,找到两者node one
之间的最短路径。node four
7
我们想要找到的解决方案是首先从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
的矩阵跟踪元素的状态),这意味着我们选择了。现在,所有连接到的节点都通过遍历相应的边来更新值。visitedArray
minArray
node one
node one
这minArray(6,3) = 191
意味着我们已经走了一段距离191
才能到达,node three
而我们剩下的钱是6
因为我们已经支付了1
到达那里的费用。以同样的方式minArray(3,2)
设置为190
。红色方块标记该元素(7,1)
已被访问。
第 3 步
现在我们再次找到最低的未访问元素(即minArray(3,2) = 190
),将其设置为visited
并更新所有连接到它的元素。这意味着距离累加,剩余的钱是通过从当前值中减去成本来计算的。
请注意,返回node one
from太昂贵了node two
。
第4步
下一步,选择minArray(6,3) = 191
看起来像这样。
第 5 步
三步后,数组看起来像这样。这里选择了两个相等的元素382
和一个相等的元素383
。请注意,元素的值仅在改进(即低于)当前值时才更新。
第 6 步
数组继续填充,直到所有元素都被访问或仍然具有无限值。
最后一步
最后一步是通过找到第四列的最小值来找到总距离。我们可以看到,最小值minArray(0,4) = 385
对应于正确的解决方案。
注意:如果第四列的所有值都是无限的,则意味着没有有效的解决方案。该算法还指定如果在第四列中有多个相等且最小距离的值,则选择最便宜的一个。