设为首页收藏本站官方微博

技巧 AVG迷题探索(02)

[复制链接]
查看: 13030|回复: 28
打印 上一主题 下一主题

[技巧] AVG迷题探索(02)

跳转到指定楼层
楼主
发表于 2007-8-21 13:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

AVG迷题探索(02)

, {) z5 L6 {0 B. _2 w6 M! f

" T% J7 U, a3 J7 s: H 3 E$ \$ O( c7 _+ g0 j+ h* [# z
$ ?/ \' Y* h& J) N* v# Y

; j7 j1 {0 B$ z6 \' r$ M6 `  i% d6 V* E6 h
        破箱人中的这个迷题颇为有趣,如果我们换个角度来思考,把进入迷题时各灯泡的状态看作一幅图画,而把电源接通后各灯泡的状态也看作一幅图画的话,那么这道迷题也可以当作是一幅“拼图”类型迷题吧~不过这个“拼图”却不是靠“移动”各部分来“拼”成的,而是依靠“旋转”各部分来“拼”成的。
! j: K& H( Z* }+ h* T. f2 w; o        如果各行列的旋转按钮不像现在一般有个指针的话,即使我们能够看到这个拼图的最终状态,我们有把握把它拼好么?恐怕不是每个人都有肯定的回答。
3 c6 m4 S! Z! P8 ^7 ^/ Y4 w) y这个迷题的变化真的如此复杂吗?事实上这却是一个最最简单的拼图迷题,为什么?请看下面的分析。
# a8 I5 ]3 {  C& `0 M3 O9 X        这类迷题和其他拼图迷题的产生方法是一样的,都是在整齐拼图的基础上,由迷题作者通过使用和游戏者一样的操作方式随意变动而产生的。那么先让我们看看迷题作者对这幅拼图的变动产生了什么效果。
: y$ g2 b0 b4 |
  r2 F8 S$ j1 X3 t# F: [; N
+ U1 M1 M: N' G& b1 K6 e  ]( \* H9 [3 ?7 f; ]! o+ ~1 P( u
        迷题作者通过点击每一行或列上的旋钮来旋转该行或列的全部方格,因此我们可以用上表来表示全部方格的变化情况。假设全部方格的初始状态为0(即没有经过旋转),然后方格每被旋转一次,它的状态数值就增加1,最后表上的数字就能很清楚的显示出迷题作者对拼图做过什么手脚了。
7 @# V1 c  X' Q5 g% G9 B( c' P4 D$ i9 X+ ~
9 I' {# g7 t2 L
2 j; Z" F6 t/ K* ~4 W( M
        例如作者对A列做了两次旋转,对5行做了一次旋转,表格的表示就如上图所示,可以看到行列相交的方格A5因参与了两次调整,故已经旋转3次了。 ) F# a; {4 Q8 M6 R
        于是,作者就开始对这个表格(也就是迷题本身)做随意的调整了:
0 Q3 b* O7 G5 X' ?# |. @
+ H* o7 e! t% `! F- [0 u
& A( b! v9 w8 @. F/ K- d. O1 }5 e$ w2 v: b1 e7 Q% [
        呵呵~现在简直就是一团糟嘛,作者的任务就完成了,游戏上市,摆在我们面前的就是这“一团糟”的东西,怎么办? 6 Q3 Q+ x3 W* Q/ s; h; h8 f: [
        看着上面这些毫无规律的数字当然头痛,但应该记住,上面的数值只表示每个格子经过了几次旋转,但并不代表格子的状态。实际上因为是正方型的格子,所以格子的状态只有4种而已。因此我们可以先通过一些转换,把表示旋转次数的数字变为表示状态的数字,方法是把上图数字对4取模(即与4相除取其余数),于是得出: 2 S0 K9 |; W0 a4 f5 v

2 X" Z, ~, O! j* i- i 2 s9 k- U" N( K6 @

  B* H% \7 ]% i$ c# N$ e! G        现在的画面好看很多了,每个数字1、2、3、0分别代表该方格处于的不同状态,很显然,我们需要做的就是让全部数字归0,这样就能把拼图复原成初始状态了。所谓“归0”,就是继续旋转数字为“1、2、3”的格子,使其累加转动次数变成4(记住:状态4=状态0)。
; H: e- n6 c( Q) B! J5 B4 i; E, ?% H9 ^) d% d  \9 l
      这里介绍一种极其简便的“归0”方法:选定任一行或任一列为目标,先把它全部归零,然后再调节其他的列或行,这样每行/列的旋转次数都不需要超过3次就可以解决问题了。还是以上图为例,假设我们选择先调整E列: 3 L! f7 P7 u. D8 ]2 c& G5 V
; i$ N% J" |. H. Z" P

; q, ^3 `  c3 h) Y' K! L# d/ x; m
        我们通过点击按钮1两次,使行1的全部方格转动两次,E1的状态即由2转为0(4)了。同理我们通过按动按钮2~8,把E列的全部方格“归0”, ' Y( R' V4 ]5 q6 D" q3 `; l

, g, l6 V! o3 \0 Q" ^ ' x5 ]2 K/ w9 Q/ K

8 S; {2 s# C8 V7 u' J$ h$ @        看到了,结果很神奇对不对?尽管我们只把注意力放在E列上,可是当把E列全部“归0”后,其他列上的方格居然也自动排列得整整齐齐了。
5 x& \, u% \( h) N# r        剩下的工作就是通过A~H几个按钮,把不为0的列转过来就好了。
1 y" d0 Y8 Y0 Z' g5 o6 e7 t/ P* \) r( `7 i
        上面的方法可不是碰巧的呀,如果有朋友表示怀疑,说我们是碰运气,那请继续看下面的证明。 * \6 x/ ?  D2 u" p& k1 _# v
0 S0 R$ g* G( t, f

3 A% P, K! f9 \/ m6 j& e(附上一个excel小程序,各位可用来测试本文内容)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
 楼主| 发表于 2007-8-21 14:00 | 只看该作者
证明:7 _  I( y7 s0 e2 B6 n
$ _% h. q* c( \; _2 \% j- h
* z3 z$ Z6 w# s0 N0 l/ w

- J  Y( f) t; A. X3 X& f1 |0 p        假设作者在打乱拼图时,对每一列的转动次数为x1~x8,每一行的转动次数为y1~y8,那么每个方格转动的次数可以在上图这样表示出来。和前面的步骤一样,我们对全部方格的转动次数对4取模:; e' D9 h. T" k9 F

8 k/ v/ u" b5 @$ p
. A) }: j% j1 q
. t; J7 i" @; \        还是和刚才一样,我们随便选一列,譬如x5列为第一目标进行“归0”。以x5y1格为例,该格子现在的状态是(x5+y1) mod 4,那我们要调整y1多少次呢?设调整次数为Δ1,则:
( _. i; o% _- z$ m7 J                                               ((x5+y1)mod 4 +Δ1)mod 4 = 0
2 o# a' X& S* \$ n, s. P( p1 R+ z$ _4 s/ h% o; {' a4 \3 d# p& e1 K
        因为:
6 O; k6 m. l3 e: E/ @5 Z- Q                                                              (x5+y1)mod 4 < 4& a" v% s( d. y1 ]& f2 R! z; E
% l* c2 D' K' F
        所以上面方程可转化为:0 f7 g! J' A8 d9 k. v  _
                                                         (x5+y1)mod 4 +Δ1 = 4
& Q5 S. x( l7 V9 Z9 P/ }  ~2 q( B( M' N7 u, {
        所以调节次数Δ1等于:: T# g( [* E( w* J. p
                                                          Δ1 = 4 -(x5+y1)mod 4
) ]4 Y+ C& t5 V* u  |) v9 r0 ]3 e- i9 J
        按照方程结果,旋转y1行Δ1次,则y1行全部方格的状态变为(全部列出太长了,截选一个方格来说明):
+ ?/ N/ p& _  ?5 y    x1y1方格:
6 N! e; A9 p" v4 L4 K( {                                               (x1+y1) mod 4 + 4 -(x5+y1)mod 42 [3 M3 _# X  C

7 P) a" Y$ V' W0 ^. D: n9 f        为了表示出方格状态,上式必须再对4取模:, ^* H3 G2 V( ?7 M: l
                                      ((x1+y1) mod 4 + 4 -(x5+y1)mod 4)mod 46 y  |5 j8 @  |5 Z2 {# c
" B/ c2 K5 |, B1 W! }
        简化一下:
1 b' t! u8 a- s. Y: D                                                        (x1+y1 - x5 - y1) mod 4$ l- ^9 Q, C0 G+ u9 }& l+ \1 Q3 w
+ G  ]" H. U9 I! H4 t+ C
        于是x1y1的状态为:
7 ]- [1 W0 O( J2 \* z6 t                                                            (x1 - x5) mod 4
8 X1 C! b- E" ~% h8 T        
, s! U) O7 z/ `7 Z9 ?" ?6 p        同理我们可以得到调整后y1行全部方块的状态如下:
4 [7 }! v. U2 T
0 ~. k+ L; h% [8 g. p& ]8 ]( ?2 w" X8 Y# Q1 e7 o: @
3 b/ a: F0 s7 |: s1 g$ `3 y
同样的方法,我们可以算出y2~y8行的旋转次数Δ2~Δ8,并使整个矩阵的状态变为:6 b" C$ f" D$ `8 f  U& A2 D
& |; Z% T) |  W- P/ |0 s

4 o0 \4 z; y! j, S& w/ X& v# l( k, Z; y1 q5 |1 f+ _
        可以清楚看到,现在同一列上的方格都处在同一状态之下,这和我们实例中的结果是一致的。证毕!
! N, }$ D- ]* j) W, v( S4 Q: a$ a9 e" m  F. S

3 c4 D/ H" E+ r9 L: O/ C4 q    好了,这条迷题的分析只能到这里为止,实际上我们分析的只是这一类迷题中格子的旋转规律,通过这种规律总结出一般的方法,使用此方法可以迅速把迷题调节到解决状态,但前提是我们事先知道“解决状态”的图案。. d# e$ E2 c0 d; l1 @. G
    ( o) f9 |/ r7 A! O5 r/ P
    所以,很遗憾,虽然我们找到旋转规律,却仍无法解决破箱人这道迷题,因为刚刚面对时我们跟本不知道“解决状态”是什么样子的。呵呵~我们架起了桥梁,可不知道对岸在哪。这个问题小弟实在还没解决,请高手来指教了!
回复 支持 反对

使用道具 举报

板凳
发表于 2007-8-21 14:33 | 只看该作者
我顶  tabris你也忒牛了吧
回复 支持 反对

使用道具 举报

地板
发表于 2007-8-21 14:34 | 只看该作者
学了两年的高等数学都看不懂  我要仔细研究下
回复 支持 反对

使用道具 举报

5#
发表于 2007-8-21 14:45 | 只看该作者
我的高等数学% S8 M& o1 y6 i7 s. R) G
+ k  c" Q( }2 l1 @! ^" o: L
5 V6 f  X4 w0 X  c# P  Z
简直没学过
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2007-8-21 15:13 | 只看该作者
向soring救助,我贴子里附的excel小程序不能锁定,请你下了看看怎样修改才行。谢谢啦~
回复 支持 反对

使用道具 举报

7#
发表于 2007-8-21 15:14 | 只看该作者
我草[s:15] ~tabris你是搞得越来越虚幻了~
% I5 M, q& k7 [9 U7 o* @; w感慨完了再慢慢看~~~
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2007-8-21 15:19 | 只看该作者
其实可以不看后面的证明的,那个东西我都觉得很烦,把附件下载了点点就完全能够明白什么意思了哦 [s:1]
回复 支持 反对

使用道具 举报

9#
发表于 2007-8-21 15:37 | 只看该作者
晕 完全不会用excel 看得出tabris已经是高手了
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2007-8-21 15:41 | 只看该作者
没办法呀~工作需要,每天必用EXCEL,是个宝
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表