游戏动态

游戏规则观察:单向通道与能到达的房间(练习17)

2026-10-21

地图上两个房间之间画有连线,并不一定能双向通行。按箭头方向从起点逐层探索,才能区分能到达的房间、只能够返回的房间和完全隔开的区域。

以下是为了练习规则阅读而设计的独立场景。所有输入在这里完整列出,可以先自己记录结果,再对照后面的计算。它不声称对应某款现成游戏;如果实际说明中的边界或处理顺序不同,应以该说明重新演算。

条件与输入

本例通道只按箭头方向移动,每条边花费一步,没有钥匙、费用或隐藏开关。这里列出的层数是最少通道数,不代表实际耗时;反向边必须另外存在才可走。

先处理起点,然后按队列顺序处理发现的房间;同一房间的出口按字母排序;首次发现时记录前一房间步数加一。

房间['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],起点E 有向通道[('F', 'D'), ('B', 'E'), ('G', 'C'), ('C', 'F'), ('A', 'H'), ('E', 'C'), ('A', 'G'), ('G', 'A'), ('E', 'B'), ('B', 'A'), ('D', 'H'), ('H', 'G'), ('D', 'G')]

逐项复盘

处理房间E,当前最少0步,向外箭头通往['B', 'C'];首次发现['B', 'C'],队列余下['B', 'C']。

处理房间B,当前最少1步,向外箭头通往['A', 'E'];首次发现['A'],队列余下['C', 'A']。

处理房间C,当前最少1步,向外箭头通往['F'];首次发现['F'],队列余下['A', 'F']。

处理房间A,当前最少2步,向外箭头通往['G', 'H'];首次发现['G', 'H'],队列余下['F', 'G', 'H']。

处理房间F,当前最少2步,向外箭头通往['D'];首次发现['D'],队列余下['G', 'H', 'D']。

处理房间G,当前最少3步,向外箭头通往['A', 'C'];首次发现[],队列余下['H', 'D']。

处理房间H,当前最少3步,向外箭头通往['G'];首次发现[],队列余下['D']。

处理房间D,当前最少3步,向外箭头通往['G', 'H'];首次发现[],队列余下[]。

最少通道数{'A': 2, 'B': 1, 'C': 1, 'D': 3, 'E': 0, 'F': 2, 'G': 3, 'H': 3};不可达房间[]。

如何自行核对

对每个可达房间,检查它是否能由前一层的某个房间一步进入;再检查所有从可达房间出发的箭头,其终点也必须已被发现。这样可以同时发现漏查与多算。

把某条边反过来后,可达范围可能缩小也可能扩大,不能只看无方向的连线外观。若通道耗时不同,本例层数也不再直接等于最短时间。

练习时保留原输入,只改一处条件,再观察哪些结果发生变化。若结果与预期不同,先查编号起点、边界是否包含以及前一步留下的状态。这样的记录能把“感觉不对”变成可复现的问题,也更方便向同伴说明自己的判断依据。