目录
一,踏马
Taptap中的游戏。
1,游戏规则
游戏规则是,根据马走的日字,走出一个圈。
对于有数字2的,要走2次,其实就是2个圈的交点。
结果图不太能显示完整路径,所以我手动补充了一下。
2,简单分析
(1)问题本质
问题可以分解成两个问题,第一,寻找一个圈,第二,一笔画完圈。
(1)在一个无向图中寻找一个圈,使得每个点经过的次数都和给定数字相同。
给定数字绝大多数是1,少部分是2
(2)一笔画完圈,圈可能自交,即由若干个圈组合而成。
(2)起点
因为是圈,所以任意一点都可以是起点。
不过对于有数字2的,用数字2的点作为起点更容易找到答案。
3,策略思路
(1)圈分割
(2)部分解
(1)度最小的点
度最小的点,只有2个邻居,如B的邻居是AC,则ABC必定是圈的一部分。
(2)路径拼接
对于简单圈,两条路径只要有公共端点,即可拼起来成为一条路径。对于自交圈,如果公共端点不是1,则不一定。
有2及以上的才是自交圈,只有1的是简单圈。
总之,如果两条路径有公共端点,且这个端点不为1,则可拼起来成为一条路径。
这样,再去找剩下的部分,就比较容易了。
其实问题本身并没有得到很大的化简,主要是看起来更清楚而已。
二,立方骑士
Taptap中的游戏,最强大脑同款项目,推理过程和平面骑士跳并没有任何区别。
(1.5)
棱上的格子有两个甚至三个面的,算作一个格子。
跨面的条件
必须通过棱上的格子,才能从大立方体的一面走到另外一面。
(1.9)
(2.3)
这一关涉及5个面,要2个截图才能截下来。
立方面连通性
立方体的6个面中,若干个有白格的面之间,不是所有面都是连通的,即使是2个相邻的面,也可能可以推断出这2个面的白格之间是不互通的。
PS:有起点或者终点的面,一定有白格。
分治算法
因为跨面一定要走棱上的格子,所以很容易把分而治之。
以(2.3)为例,首先把4个侧面都剥离出来,汇总到主面上:
然后继续推理:
于是完整的答案就已经出来了。