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