关于本系列贴主题的说明。 ' X6 S& y" N3 C' W# w& j
写这个系列的帖子主旨在于深入探讨AVG中某些具有代表性的迷题,讨论研究其中的解题思路以及普遍方法,虽然内容当中肯定会引用特定的迷题做例子并详细解说,但实际上介绍的解题方法却并没有特别针对某一个游戏的某一个迷题而言,算是攻略好像也不太合适。思前想后决定放在“原创评论”这边,姑且算是一种“对某些类型迷题”的评论吧,希望没有违背本版的宗旨。
2 I/ u* F; g/ h+ V# Q9 w1 O0 @
1 b7 }( Y w( D9 h9 h, w* Y
6 w& I) K1 n l* U. @) @ 9 [# n) L, o3 r
与攻略还有论坛的解答帖子不同,我们在这里要深入探讨一种迷题的“一般解法”,请注意:“一般解法”是一种能让你成功破解任何一个这类迷题的办法,但却不一定是最快捷办法(这是一把万能钥匙,但需要耐心,呵呵~只求通关的朋友请飘过吧!)。
! h# t% r* r. I
6 u9 e$ o) T# Y ^. }
, s3 q, o: A. M' y; L( [ g; n3 H# z
8 Z ]7 k# `$ r3 Y9 p 在论坛的破箱人迷题统计中,这个是令大家最头疼的迷题了,就让我们从这个最大难题开始我们的解迷之旅吧~ ( r: n* b4 S' \
- R" V, M, } S" q* L8 s7 f6 Y! M# M2 U3 K( [' [1 f
两个基本变换 3 }6 ^/ S. o0 {! u
毛主席说“克思主义的道理千头万绪,归根结底就是一句话‘造反有理’!”,所以既然要找出一般解法,则必须通过归纳,把这个千变万化的拼图迷题简化一下。这个拼图迷题的变化确实很简单,只有一种(下图):
) f3 R. _) J0 x+ g* E5 N
]) t4 ~: \6 f1 z+ v 就是四个方块围绕中间点做顺时针转动(臭鸡蛋纷飞……),先别急,确实,这个变化太简化了,于我们的解题毫无帮助,不过先让我们为这种变换起个名字——“旋转”,然后我们再看看下面这个由几个“旋转”组成的“互换”吧(下图): 5 B( N/ m8 g- z
/ l G/ Q% c2 q( D
在这个“互换”中涉及最少8个单元格,假设开始的排列如1所示,图中三个点击旋转的按钮姑且就叫做“上、中、下”吧,则步骤如下:
2 O' y) y3 j% \" \0 B" ~(1-2):上×1
- {3 R/ k$ L. Q(2-3):下×3 , J, P5 l+ X+ S/ ?) v( Q, f
(3-4):中×2 H a1 x8 {1 J
(4-5):上×3 & ^7 h0 \. Q/ s/ w% A) m+ o
(5-6):下×1 ! U$ `( ~# k) P4 C3 R$ W
是不是很有规律呢?按钮的顺序为“上下中上下”,点击(转动)的次数为“13231”,看看结果,对比1和6,我们在左列排列不变的基础上,把右列的上下部分互换了。
# e8 d5 E0 X; R3 l/ c( Y/ x( U* T同样道理,我们也可以使右列保持不变,让左列的上下部分互换,唯一不同的是按钮顺序变为“下上中下上”而已,点击(转动)次数依然为“13231”。
8 t- m) I9 a ` J H 如果我们再把上图旋转90度,那么上下互换的操作同样也就适用于左右互换了,这个“互换”的操作不难吧?确定你要实行互换的行或列,根据下表找到第一个按钮,然后“13231”,搞定!] . R+ k" V5 d/ M, ?9 @& S0 D( P
+ O/ b. ~# m. a- c& g
需要实现互换的列(行)的位置 对应第一个操作按钮的位置 & o! F/ y# g2 _6 [& u: W; k
左 下 # R, d* c. A/ M; t: _
右 上 $ i7 z5 ]# V( T/ Y0 ^2 E" S
上 左
& C7 G, h4 \1 N3 r& S2 _0 _7 v 下 右 0 ^% z) S0 X6 B
. c% V% m3 P7 ^- r1 E5 ?7 B: @好了,基础练习到此结束,下面是正题了。
5 I+ l2 n2 p. _# w9 ], l* g
& w$ I7 ?/ x6 I8 H% K# n5 C8 F1 L% I# L' d$ T
任意变化
/ b1 c g0 ?8 w/ ~8 Q8 K/ W+ F 我们现在掌握了“互换”的秘密,有什么用呢?很重要,事实上,这类拼图迷题的全部变化,都是通过有限次的“互换”再加上1~2次“旋转”实现的。为什么这样说?还是以8个格子为例: ; n% |4 H B2 t Y) u( L) p, m6 l
3 D% t4 C* r2 @1 N/ ]
假设我们现在想重新设置e的位置,能否通过有限次的互换加1~2次旋转实现e的任意移动呢?答案是肯定的。
! H9 d! v, B( X9 G: H; n5 P* 通过一次旋转,e能够到达现在c的位置,这绝对正确;
) ^( F8 C0 u6 Q$ |* 通过一次互换,e能够到达现在a的位置,这一点也毫无疑问;
1 O4 h& `- X7 c, a( F* 好了,如果e能到达c的位置,它再进行一次互换,就能够到达g;
, S+ O. F5 ]2 J0 {' F6 z# } (至此,左列全部位置均能到达) * \% g8 O9 Y4 ?2 t8 D [
* e能到达a位置,再进行一次旋转,则能到达b; " e" y+ \' L. |- z6 R
* e在原位进行一次旋转,则到达f; # {# n) I8 c3 K% T* m
(现在剩下d、h位置了) 6 I1 r V* s/ G
* e旋转两次可以到达d位置;
, T0 M) j( Q* f* e在d位置上再加一次向下的互换,就轻松到达h。 - G" d+ U* W+ }+ p( x M0 v# M: f
通过以上步骤,我们让e遍历了全部位置,数一下,所有的过程都不超过有限次的互换和1~2次旋转,而且完全能在8个格子的范围以内实现。一幅任意大小(当然格子数要大于8)的矩形拼图都可以看作是好几个8格子单元的组合。
# L9 R2 K, u2 Y3 j 因此,理论上,通过有限次的互换和1~2次旋转可以任意变化拼图的排列。这里的“任意”,是指不考虑其他格子的情况,任意安排目标格子的位置。如果考虑其它格子的排列,在有限个格子的范围之内,全部格子的排列则不可能是任意的,例如:
5 N$ `3 t. q+ q5 e1 s" q, S
& I4 U# E+ Q( R; A/ ? 在这样的8个格子的限制之内,如果规定左列的顺序aceg不变,则右列的顺序只能为bdfh或fhbd,不可能有bfdh等其他的情况出现,姑且把这一条称之为“定理一”。
% _ i, o( f6 W4 F) t1 A 不过我们其实不必为这种格子与格子之间排列方式的内在联系操心,因为我们可以这样考虑:现在的这个混乱的拼图其实是游戏制作者在整齐拼图的基础上通过和我们一样的规则变化出来的,因此,一切一切格与格之间内在的联系已经内含在拼图里了,无论拼图如何混乱,这种内在联系不会改变。所以我们只需专注于某一个格子的正确位置,其余的格子自然会按照这种内含关系发生改变。 |