每块长方形覆盖两个相邻格子时,面积为偶数只是必要条件,不能保证缺口棋盘可铺。把第一个空格的所有覆盖方式逐一尝试,能得到确切的铺法数量。
先把规则写清楚
棋盘宽四高四,部分格子被移除。每块只允许横放或竖放,不许重叠、越界或盖住缺口。递归时选按行排序的第一个未覆盖格子,分别尝试与其右邻格、下邻格配对;所有格子恰好覆盖记为一份完整铺法。
本例输入与推演结果
格子编号按行从零到十五;#为移除格,点为可用格。
..#. ###. ..#. ...# 移除编号[2, 4, 5, 6, 10, 15],黑格4,白格6。 完整铺法数量0。 一份样例,零份时为空:
这里的编号只用来辨认本例中的对象,不能当成另一份记录里的固定身份。阅读表格时先找到输入,再顺着运算顺序对照输出;空列表、零值和不存在的结果有不同含义,不能混用。表中分数保留精确值,小数显示仅为阅读方便。
怎样自己复核
每次必须覆盖选中的第一个格子,才能避免把同一组方块因放置先后不同而重复计数。黑白相间染色后,每块覆盖一黑一白,因此黑白数量不等必然无解;数量相同仍可能被形状限制。
检查样例铺法中的格子总数是否等于可用格数,每格是否仅出现一次。若结果为零,应先看染色数量,再观察是否出现孤立格或狭窄结构;这些线索有助解释无解,但最终数量仍来自完整枚举,不能以直觉代替搜索。
适用范围
这里的铺法只比较方块占据哪些格子,不区分外观和放置顺序。旋转或镜像后的铺法如果占格不同仍单独计数,没有进一步按棋盘对称性合并。
本例是一套可复现的游戏机制练习,不依赖具体品牌或某个软件的默认设置。修改任何边界约定、输入参数或操作顺序后,应重新推演并保存中间状态。发现差异时先定位第一处不一致,再判断是规则不同还是计算错误,不要只把最终答案调整到看起来相同。
