两块地形只在角上碰到时,是否属于同一区域取决于采用哪一种邻接规则。混用规则会让区域数量、填色范围和连通提示彼此矛盾。
地图六乘六,只研究值为一的格子。四邻接只允许上下左右相连,八邻接再允许四个斜角方向;地图边缘不环绕。两种规则都只判断静态格子集合是否连通。
一为研究地形,零为背景 001100 111011 101001 101000 000011 100110
四邻接组件1,大小9,格子坐标[[0, 1], [0, 2], [0, 3], [1, 1], [2, 0], [2, 1], [2, 2], [2, 3], [3, 0]]。
四邻接组件2,大小1,格子坐标[[0, 5]]。
四邻接组件3,大小4,格子坐标[[3, 5], [4, 4], [4, 5], [5, 4]]。
四邻接组件4,大小3,格子坐标[[4, 1], [5, 1], [5, 2]]。
八邻接组件1,大小12,格子坐标[[0, 1], [0, 2], [0, 3], [1, 1], [2, 0], [2, 1], [2, 2], [2, 3], [3, 0], [4, 1], [5, 1], [5, 2]]。
八邻接组件2,大小1,格子坐标[[0, 5]]。
八邻接组件3,大小4,格子坐标[[3, 5], [4, 4], [4, 5], [5, 4]]。
共有17个目标格,四邻接4片,八邻接3片。组件数量减少来自合并,不是目标格消失。
先列出四邻接的每个组件,再看哪些组件因斜角接触被合并。八邻接组件数不会比四邻接更多,但组件大小分布可能变化很大。每个目标格都必须恰好归入一个组件。
练习时可以先遮住结果,沿用相同输入独立记录中间状态,再逐项比较。发现不同后先定位最早分歧,确认边界包含方式、编号起点、更新顺序以及是否提前取整。最后结果一致也不表示每个中间步骤都正确,因此保留过程记录有助于看清原因。
连通不等于角色一定能穿过。八邻接把斜角视为相邻,只是图上的定义;有宽度的角色可能仍被两侧墙角挡住。路径碰撞规则应另外说明,不能从填色连通性直接推断移动合法性。