前言:本文中的是微信小程序里面的汽车华容道。
汽车华容道应该是从三国华容道改造来的,比三国华容道简单很多。
三国华容道 https://blog.csdn.net/nameofcsdn/article/details/104597070
目录
一,规则
整个界面是6*6的格子组成的,车子有1*2的,1*3的,1*4的这几种,车子只能前后滑不能左右滑,目标车(唯一的红色车)在中间一行,移动车子,使得目标车移出去就胜利了。
PS:本文的策略都是在此规则的基础上表述的,别的华容道游戏可能略有区别。
二,全局策略——对齐法
有很多很多局面,都有不止1个1*3的车子,当目标车滑过时,他们就必须在下面,也就是右下角就是几个竖着的车子。
于是左下角就只能是几个横着的车子,其他的车子在上面。
这样的一种状态,我称之为对齐状态。
通过往这个方向靠近的操作实现最终胜利的方法,我称之为对齐法。
对齐法简单归纳一下就是,先识别哪些车子要移上去,然后把这些车子移上去基本上就快胜利了。
下面给出一些关卡的开局状态和对齐状态:
三,全局策略——位置推导法
位置推导法就是,目标车从开始位置到最终位置,必有某个时刻位于中间的某个位置,以此为基础,一个个推出其他车子的位置。
举例来说:
当红车处于下图红框位置时,黄车只能在黄框位置。
进一步推出这3个黄车的位置:
进一步推出2个白车的位置:
其中画的比较丑的2个白圈表示,这个白车有2个可能的位置。
至此,可以说把每个车的位置都推出来了。
四,局部策略——关键车
使用位置推导法可以发现,对于大量的开局都有这样的一个规律:
存在这样的一个车,只要推导出它的目标位置,并把它移到这个位置,这一关就基本上胜利了。而且,在把它移到这个位置的过程中,不需要考虑其他任何车子,在把它移到这个位置之后,就不用再动了。这样,这个问题的复杂度就大大降低,不仅划分为2个子问题,而且格子的数量和车子的数量都有下降。
我把这个车子称为关键车。
寻找关键车的方法自然是一步步进行位置推导,但是关键车的选择标准是什么呢?
关键车选择原则一:评估每个车子到目标位置的距离,距离最大的车就是关键车。
这里的距离是综合考虑直观的几何距离和解空间的距离(即操作步数)得到的。
以前面这一关为例:
距离最大的是第一行的白车和第四列的黄车,但是,
在除第四列的黄车之外的车子都在或非常接近目标位置的情况下,第四列的黄车可直接往下移,
而在除第一行的白车之外的车子都在或非常接近目标位置的情况下,第一行的白车也无法往右移,因为被第三列的白车挡住了,所以第一行的白车就是关键车。
关键车选择原则一的补充:在考虑每个车子到目标位置的距离时,可假设其他车子都已在或者非常接近目标位置。
找到关键车之后,我们先把关键车移到目标位置:
然后迅速把第三列的白车归位:
至此,已经没有任何悬念了。
再来看看“关键车选择原则一的补充:在考虑每个车子到目标位置的距离时,可假设其他车子都已在或者非常接近目标位置”,
这个思路还不够简洁,而且不够准确,于是我推出原则二来代替:
关键车选择原则二:如果距离目标位置的车子(不包括红车)数量超过1,根据这些车子移动到目标位置的过程之间的逻辑依赖性,找到需要第一个移到目标位置的车子,即为关键车。
举例来看:
按照位置推导法,找到目标位置:
这里的椭圆用来表示相邻的2个目标位置都是有可能的。
可以看出,距离目标位置较远的是2个车:第3列的白车和第5列的黄车。
进一步,很容易得到,一定是先把第3列的白车移上去,然后才能把第5列的黄车移下来,所以第3列的白车就是关键车。
先把第3列的白车移上去:
再把第5列的黄车移下来:
至此,已经没有任何悬念。
五,全局策略——双时刻位置推导法
这其实是对位置推导法的简单拓展,双时刻位置推导法就是,红车一定会从某个位置移到它右边相邻的位置,在这个过程中其他车子是不动的,也就是说这3个格子都必须被红车占据。
举例来说:
用位置推导法是推不出第2行的白车的位置的,但是用双时刻推导法:
红车一定会从左边的红框移到右边的红框:
可以推出此时其他车的位置:
所以关键车就是第2行的白车,移到左边之后就变成:
此时,继续分析,不难发现下一步就是要把第3列的车子移上去:
至此,已没有任何悬念。
六,单点策略——口字形反转
有时会碰到这样的局面:
稍微移动一下变成:
很明显,右边的中间四个车子形成了一个口字形,互相挡道,谁也挪不了。
口字形的破解方法是:看哪个车能后退到脱离这个口字形,把这个车后退,再把另外三个车移到他们的目标位置。无论什么情况下,都至少存在一个这样的车。
以上图为例,只有红车可以后退,所以先把红车后退,变成:
再把口字形的另外3个车子移到目标位置:
PS:其实第6列的黄车离目标位置还有一格差距,不过在不移动红车的情况下,只能做到这一步了。
此时,已经没有悬念了。
用这几个攻略,即可轻松全部通关: