‹ 返回工坊合集
可以玩的数学 · 第 32 站 · 九章格数学 PhiloMath

五联方工坊 · 伤脑筋十二块 · Pentominoes

十二块骨牌、每块五个小方格,拼起来能填满 6×10、5×12、4×15、3×20 —— 六十格恰好,一格不多。 这套玩具在英文里叫 pentominoes,1953 年由所罗门·戈龙布命名,1957 年经马丁·加德纳在《科学美国人》上推广, 中文俗称「伤脑筋十二块」。本站的每个数字都由程序亲手穷举,不是抄来的:12 种自由块、18 种单面块、63 种固定块, 以及四条矩形的完整拼法谱。第 4 关的 8×8 板还可以随手把中心空位挪到任意位置;求解器会把任意一块板的解尽量全部列出,逐个翻看。

点右侧任一块选中 → 在棋盘上点一下放下(点按处会被块身盖住,自动对齐,不必对准锚点); 在已放下的块上再点一下可取回。旋转/翻转作用于当前选中的块,换块后仍保留。目标:把整块板填满,十二块全用上。

板的选择

「自绘」模式下点格子可增删;格数须恰为 60(12 块 × 5 格)才谈得上拼满。

指标值
格子数
本质不同解(全量普查)
黑白差 d(棋盘染色)
着色不变量判决

四条矩形的完整拼法谱(程序穷举)

板原始解数对称群本质不同解数

「原始解数」把整体旋转/镜像后重复的拼法也各算一次;除以该板自身的对称群阶数,才是「本质不同」的拼法数。 两条口径都被程序算出,除法整除性也一并核对。

8×8 挖掉一个 2×2 洞

8×8 减去 4 格仍剩 60 格,正好够十二块用。洞开在哪儿?上面对局的第 4 关和这里的「8×8 选洞」预设都能随手换;程序把 49 个洞位全都算了一遍。

从一次心算到一门学科

1953 年,美国数学家所罗门·戈龙布(Solomon W. Golomb)在一次演讲中被要求心算一个拼板问题的答案, 他把这套十二块命名为 pentominoes(希腊语 penta = 五),并由此开创了「多联骨牌」(polyomino)这一研究领域。 1957 年马丁·加德纳在《科学美国人》的数学游戏专栏介绍了它,玩具因此风靡世界——中文里它被叫作「伤脑筋十二块」。

拼法谱:穷举就是证明

十二块一共覆盖 60 格,因此只能填 60 格的板。四条矩形是最经典的靶子,它们的拼法数在文献里各有定论, 本站用自己写的求解器把它们全都重算了一遍:

「本质不同」是把整体旋转、翻转后重复的拼法视为同一张。3×20 只有 2 种本质不同的拼法, 而 6×10 多达 2339 种——同样是十二块,棋盘一变,答案的多少能差三个数量级。

精确覆盖与舞蹈链(DLX)

把所有可能的位置写成一张「0-1 表」:每一行是一次「把某块放在某处」的候选,每一列是一个必须被恰好覆盖一次的要求 (十二个「每块用一次」+ 六十个「每格盖一次」)。于是拼板问题化为精确覆盖问题(Exact Cover): 挑出若干行,使每一列恰被覆盖一次。Knuth 在 2000 年提出的 舞蹈链(Dancing Links, DLX) 用双向十字链表让「试—撤」都变成常数时间的指针改写,至今仍是这类问题最快的实用算法之一。 本站页面里跑的求解器就是这个算法:它在您的浏览器里现场穷举,而不是查表。

守恒律:不需要搜索就能排除的板

把棋盘像国际象棋那样染成黑白。一块五联方盖住 5 格,多数是「3 黑 2 白」或「2 黑 3 白」——黑白差 ±1; 唯有 X 块(那个十字)盖住的是同色 4 格 + 异色 1 格,黑白差恒为 ±3。 十一块 ±1 加上 X 的 ±3,十二块合计最多只能凑出 ±14。于是: 任何 60 格的板,只要黑白差的绝对值超过 14,就一定拼不出来,连一次搜索都不必做。 求解器标签页里那行「着色不变量判决」就是现场算给您看的;「演示:不变量否决」按钮会造出一块黑白差 36 的板, 点一下计数——求解器连一个搜索节点都不会访问。

这只是必要条件:黑白差不超限,并不保证能拼出来。真正的判决仍要穷举——但不等式能把一大批板一秒否决。

三倍放大问题(Robinson triplication)

把一块五联方横竖各放大三倍(45 格),再从十二块里挑九块把它拼满——每块至多用一次,拼完恰好剩三块。 这是 R. M. Robinson 提出的经典问题,Golomb 在《Polyominoes》里介绍给世界:并非任意九块都能胜任,某块自己参不参与也影响答案。 本站求解器把十二块的三倍放大逐一算完:

逐块与文献(Golomb《Polyominoes》第 1 章;recmath「Pentomino Constructions」)完全吻合,合计 14 070 种 (旋转、镜像不计重复)。最容易的是 P 块 9144 种,最难的是 X 块只剩 20 种——X 那块十字形,恰是最难伺候的。

同一块只用九份自己,拼得出来吗?

换个问法:不用别的块,只用九份自己拼自己的三倍放大——可以吗? 程序顺着「最左上的空格必须被覆盖」分支穷举,答案相当干脆:十二块里只有 I 与 P 可以。 其余十块里有九块连第一关都过不去:三倍放大板的某个角格,根本放不下这些形状的任何一块(一眼判决,无需搜索); 只有 U 块四角都放得下,却依然拼不出来(穷举证明)。这一问没有文献答案,是本站顺手算出来的。

有意思的对照:换成「十二块里任选九块」,所有十二块都能三倍放大(上一表)。限制越死,能拼的东西越少—— 「九份自己」比「九块别人」苛刻得多。