零、引言
今日闲来无事,就去网上玩了玩数字华容道。上手还算顺利,但玩着玩着感觉摸索了点经验出来,发现所有数字华容道应该存在通解,遂作此篇。游戏链接附上。(虽然但是感觉后面找滑块的时间比移动的还长)
一、操作本质思考
1、旋转操作
在华容道类的游戏中,通常通过移动滑块来改变滑块所在位置,从而使目标滑块到达指定位置。数字华容道显然继承了这一思路。
那么,沿着这一思路继续思考,我们不难发现,一种特定的移动滑块方式可以被视作一种周期性的旋转,我们称之为旋转操作。
而每一次旋转,都可以使滑块移动到指定的绝对位置,而不改变区域中滑块之间的相对位置。
2、定向移动操作
如图2-1所示,我们的目的是让B滑块到达C滑块的位置,而我们不难发现,仅通过旋转操作确实可以达成这一点,但同时会导致A的错位。这是我们不想看到的。
于是我们引入了新的操作,我称之为定向移动操作,其目的是在不改变已经完成移动的滑块的相对位置的前提下,使指定滑块到达目标位置。
二、滑块分类
由于上述的操作,我们不难看出,对于任意状态的数字华容道而言,都存在3种滑块:排序完成的,未排序的,目标滑块(正准备排序的)。
对于排序完成的滑块,我们不会轻易改变其相对位置,即有可能通过旋转改变其绝对位置。这将在下文解法中给出例子。
对于未排序的滑块,我们可以随意改变其位置,以帮助目标滑块到达指定位置。
对于目标滑块,我们正打算将它放到它应该在的位置,而不改变排序完成滑块的相对位置。
三、解法(以5x5数字华容道为例)
解法分为两部分:前n-2行以及最后2行。原因我将在后文讲述。
1、前n-2行:
以第1行为例:我们首先对1-4号滑块依次进行定向移动操作归位,再将5号滑块移动到目标位置的下方,如图3-1。
然后将1-2-3-4-A-5向外挪,使最后的2x2方格构成A-D-5。
之后对A-D-5的方块进行旋转,使5邻接于4。
最后退回1-2-3-4-5,完成排序。
由此不难看出,这一方法仅适用于后面留有至少一行的情况。
而另外讨论最后2行的原因则在于在特定情况下,我们并不能执行定向移动操作使滑块直接到达指定位置;并且最后两行存在一些特殊性质。
2、最后2行:
我们可以将其看作一个首尾相连的环。如将3-1的图看作1-2-3-4-A-5-D-C-B-0。
那么我们的目标就是使这个环满足相对位置有序。
以5x5规模为例,就是是这个环满足16-17-18-19-20-24-23-22-21的顺序。
首先,将16定向移动到指定位置。
其次,可以尝试将17移动到指定位置,但可能需要通过旋转操作。
然后将其竖直放置,把18移动到17后面...一直到将20移动到19后面,之后将24移动到20后面,这一过程中可以通过将倒数第二行的数字转化为回字形的方式来为后面的排序旋转节省出空间。
(懒得画图了)
(感觉最后2行很难描述,但我确实会解?)