公司新闻

限定走几条通道时为什么不能只保存房间最短距离:独立演算第16例

2026-11-08

到同一个房间的两条路线,虽然一条更便宜,但它可能已经用掉更多步数。当终点要求恰好经过固定数量的通道时,只保存每个房间一个最小值会丢掉必要信息。

六个房间使用有向正成本通道,可以重复经过房间。第零层只有起点费用零,其他为不可达;下一层只用上一层状态沿一条通道更新,分别保存恰好零至五步的最小费用。

这一例的完整输入

通道格式为起点、终点、成本,完整通道表:[[0, 1, 2], [0, 2, 6], [1, 2, 6], [1, 3, 5], [1, 4, 3], [2, 3, 4], [3, 1, 7], [3, 4, 1], [4, 5, 7], [5, 0, 4], [5, 2, 5], [5, 3, 3]]。

逐项计算记录

精确步数 | 到房间0至5的费用(空为不可达) 0 | [0, None, None, None, None, None] 1 | [None, 2, 6, None, None, None] 2 | [None, None, 8, 7, 5, None] 3 | [None, 14, None, 12, 8, 12] 4 | [16, 19, 17, 15, 13, 15] 5 | [19, 18, 20, 18, 16, 20] 恰好各步数到终点的费用:[None, None, None, 12, 15, 20]

读表时先把输入与计算后的结果分开。空值表示这一步没有适用对象或没有可用结果,不应自动换成零。编号只负责识别本例中的元素,同一个数字出现在不同字段时,要先确认它代表位置、对象还是数值。

怎样复核和使用

每层代表精确步数而不是最多步数,不能把上一层数值原样复制到下一层。若要计算最多五步,最后再比较各层终点值;不可达状态要保持为空,不能当作费用零。

这份练习没有钥匙条件、负成本或禁止重复房间的限制。若要求简单路径,还需要额外记住访问集合;这里的分层表只解决给定通道图上的步数约束。

可以先遮住记录表,只按上述规则重算前两步,再选择一个边界条件重新试算。若结果不一致,应逐项检查输入顺序、端点是否包含以及状态在哪一步更新;不要只看最终合计相同就认为中间处理也完全正确。