实验室 · 其一

华容道

四尺见方的窄地,五虎上将围住一个曹操。你要做的只有一件事——把他从底下那个豁口放出去。棋子只能推,不能提;一步之差,满盘重来。

华容道
走脱了
拖动棋子即可推移,也可先点选一枚,再按方向键或下方按钮。
计时自你落下第一步起算,最少步数与最快用时存于本机浏览器,不上传。

记 数

已走0
用时0:00
本局最少步
本局最快
理论最少

开 局

玩 法 说 明

五分钟即可上手,五十年也未必玩腻。
目标 把朱红的「曹操」(占二乘二格)挪到棋盘最下方正中,让他从底边那道朱线豁口走出去。曹操左上角落在第二列第四行时即算过关。
怎么动 棋子只能推,不能提起、不能跨越、不能旋转。它要挪的那几格必须全空。全盘二十格,十枚棋子占去十九格,只剩一格空——腾挪的余地就这么点。
三种操作 用鼠标或手指直接拖动棋子;或先点选一枚,再按键盘 WASD 同效);或点右侧方向按钮。选中的棋子有一圈朱框。
怎么记步 一枚棋子挪动一格记一步。坊间流传的「八十一步」是把同一枚棋子朝同方向连推数格并作一步,尺子不同,数字自然不同。
悔棋与重摆 「悔一步」可无限回退至开局;「重摆」把当前布局归零,计时一并重来。换开局也是重新计时。
成绩 计时自第一步落下开始,走脱那刻停住。每种开局各自记录你的最少步数与最快用时,存在本机浏览器里。

复 原 思 路

不给现成解法,只说该往哪儿想。

一、盯住空格,而不是棋子

新手总盯着曹操,想着「怎么把他往下推」。老手盯的是那两格空地。棋子不会自己动,是空格在盘上游走,路过谁,谁才能挪。把注意力换成「我要把空地挪到哪里」,一半的迷雾就散了。

二、先给曹操腾出一条竖井

曹操宽两格,要下行,必须在他正下方备出两格并排的横向空地。所以真正的功课不是推曹操,而是把关羽这枚横块和两名小卒从他脚下清走。多数人卡住,都卡在这一步。

三、四名小卒是钥匙,不是障碍

小卒只占一格,是全盘唯一能灵活钻缝的棋。把它们看成润滑剂:先用小卒把空地「运」到你要的位置,再让大块跟进。竖将(张飞、赵云、马超、黄忠)笨重,尽量少动,一动就要还回来。

四、左右对称,可换手做

横刀立马的开局左右镜像。若你在左路推演不通,把整个思路镜像到右路再试一遍,往往豁然。这不是取巧,是省一半脑力。

五、循环是常态,别怕绕

此局的最短解也要一百多步,其中大量是「大块暂退、小卒绕行、大块再进」的循环。走回头路不等于走错路——只要每个循环结束时,空地的位置比开始时更靠近你要的地方。

六、卡死了就悔棋,别重摆

盘面死局往往只坏在最近的三五步。连按几次「悔一步」退到岔口,换个方向重试,比推倒重来划算得多。真想练最短解,就从「齐头并进」(八十五步)入手,成了再回头啃横刀立马。

关于这局棋

华容道取意于赤壁之后曹操败走华容道、为关羽所释的故事。棋盘四列五行,共二十格,十枚棋子占去十九格,只留两格空地——所有的腾挪,都在这两格里发生。

它在数学上属于滑块问题。横刀立马一局,坊间常说最少八十一步——那是把一枚棋子朝同一方向连推数格算作一步。本页按格计步,一格即一步,故最短解为 一百一十六步。两个数都对,只是尺子不同。侧栏那行「理论最少」,是我拿广度优先搜索把三种开局各穷举了一遍所得,并非抄自他处。

有意思的地方在于:这游戏没有一丝运气成分。走不出去只有一个原因——想得不够远。

全部逻辑不过两百余行,落子、判定、悔棋、记数,皆在你的浏览器里跑完,服务器一无所知。之所以先做它而不做别的,是因为它足够小,小到能一眼看清;又足够难,难到值得一玩再玩。