上海市嘉定区劳动路158号 19701564759 NG·28@j909.vip

集团新闻

游戏规则观察课:折线路径化简时为何要保留回头点——13个原始点的同向合并(练习06)

2026-10-28

同一直线上连续向前走的多个中间点通常可以合并,但一条线上的折返不能随意删除。只检查共线,不检查方向,就可能把来回走过的一段路线压成零。

下面使用独立的一组输入,逐步记录规则如何产生结果。建议先自行推演,再寻找与记录第一次不同的位置;检查时间单位、端点归属和处理顺序。所有约定均限定在本例中,其他作品采用不同实现并不自动意味着出错。

本例约定与输入

输入是横竖相连的整数折线,连续重复点可忽略。只有相邻两段共线且方向一致时才删除中间点;转弯、折返和非连续回到旧点都保留。化简要求沿途经过的格子顺序不变。

原始点列[[-4, 3], [-2, 3], [1, 3], [0, 3], [0, 6], [-1, 6], [-3, 6], [0, 6], [0, 5], [3, 5], [3, 8], [-1, 8], [-1, 12]]

过程与结果

读入点[-4, 3]:删除可合并中间点[];当前简化路径[[-4, 3]]。

读入点[-2, 3]:删除可合并中间点[];当前简化路径[[-4, 3], [-2, 3]]。

读入点[1, 3]:删除可合并中间点[[-2, 3]];当前简化路径[[-4, 3], [1, 3]]。

读入点[0, 3]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3]]。

读入点[0, 6]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6]]。

读入点[-1, 6]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-1, 6]]。

读入点[-3, 6]:删除可合并中间点[[-1, 6]];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6]]。

读入点[0, 6]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6], [0, 6]]。

读入点[0, 5]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6], [0, 6], [0, 5]]。

读入点[3, 5]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6], [0, 6], [0, 5], [3, 5]]。

读入点[3, 8]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6], [0, 6], [0, 5], [3, 5], [3, 8]]。

读入点[-1, 8]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6], [0, 6], [0, 5], [3, 5], [3, 8], [-1, 8]]。

读入点[-1, 12]:删除可合并中间点[];当前简化路径[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6], [0, 6], [0, 5], [3, 5], [3, 8], [-1, 8], [-1, 12]]。

最终保留11点:[[-4, 3], [1, 3], [0, 3], [0, 6], [-3, 6], [0, 6], [0, 5], [3, 5], [3, 8], [-1, 8], [-1, 12]],折返位置仍在。

如何独立复核

把原路径和化简路径都展开成逐格行走序列并逐项比较。总长度一致还不够,不同路线也可能有相同长度;必须检查有序轨迹,尤其是回头段。

如果后续沿路径运动还依赖每个点的等待时间、触发事件或速度设置,仅几何相同还不够。本例只化简没有附加属性的折线;带有逻辑意义的路点应额外保留其事件。

测试时保留原始数据与中间状态,再只改变一个条件作比较。先检查空状态、相等边界、重复输入和最后一步,再比较整体结果;不要为了让最后的数字相同而跳过前面已经出现的差异。明确规则后,复核才有可以重复的依据。