就想游城市

快捷导航
登录 |注册居民 |
查看: 2343|回复: 2

[灌水] 原创绝妙象棋残局的数学解法

[复制链接]
发表于 2012-11-24 12:56:39 | 显示全部楼层 |阅读模式

加入城市,听原创电台,写情感文字,分享你的一切。

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

x
街头闲逛,偶遇象棋残局(图1)。此局并非常见的江湖残局,旁观良久,不得其解,遂记在心中。回家后在电脑上用象棋软件计算,结果竟然发现各种棋软都没法解开这个残局。于是人工加电脑反复演练,才知道这个貌似平淡的残局没有和棋。一般都会走成某一方子力被围困,一动就输掉的棋形(图2)。

  喜爱玩象棋的朋友都明白“先行之利”,尤其是残局,先走一步的优势就更明显了。有趣的是,这个残局的结果竟然是红先黑胜。换黑棋先走结果就是红胜。这是一个注定了谁先走谁输的象棋残局。通过改变炮的初始位置和对头兵的数量,我发现残局的胜负结果也会发生变化。反复研究后,一些似曾相识的规律在我的头脑中越来越清晰,没错!这些规律不但能给出残局正确的解法,也能够指引出决定局面胜负的最深奥义。因为我找到了描述这个棋局的数学原理。
  首先必须建立数学模型,这个说容易也不容易。我先来讲一个简单的游戏。把石子摆成四排,第一排1颗、第二排3颗、第三排5颗、第四排7颗(图3)。规则是这样的,两人轮流来拿石子,每次可以在同一排中拿走任意颗,至少拿走1颗,谁拿到最后一颗石子,谁就赢了。例如:我先来拿,我可以一次拿走第四排的全部7颗;或者在第二排拿走2颗,留下1颗,这都是规则允许的。但是在第二排拿1颗并且在第三排也拿1颗,这种不在同一排内拿石子的方法是违反规则的。因为石子的数量是有限的,每次拿都会造成数量减少,两人轮流拿,最后一个石子总是会被拿走。拿走最后一个石子的就是胜者。也就是说这个游戏一定能分出胜负,不会出现平局。

  下面来说一下这个游戏的求胜方法。首先把每一排的石子数量的十进制数转化成二进制数。我们会得到0001001101010111。然后我们对这个数连续进行XOR运算(二进制逻辑异或运算),简单理解为不进位的二进制加法运算。即0001XOR 0011=00100010 XOR 0101=01110111 XOR 0111=0000。如果初始值为0000就注定谁先拿谁就要输了。
  例如,你先拿了第4排的1颗石子。剩余石子对应的数值分别为,0001001101000111XOR运算的结果为0001;轮到我拿了,我就拿走第1排的1颗石子,此时剩余石子对应的数值为001101000111XOR运算的结果为0000;这样依次类推下去,只要你拿完了,XOR运算的结果就不会是0000,我只要再拿掉一些石子,使结果恢复到0000即可。当然,对于不同的局面,使XOR运算结果恢复到0000的方法是不同的,而且也可能同时存在多种恢复方法。反复使用这种过程,就可以保证我在最后一次拿光剩余的石子,也就是我赢了。数学证明略。如果你看懂了,再按照上述方法演示几次,就可以掌握这个游戏的取胜之道了。
  言书归正传,让我们回头来再看前面的象棋残局。把棋盘上一路的兵之间可走的步数看作1,把五路炮之间可走的步数看作4,把九路炮之间可走的步数看作5。转化成对应的二进制为000101000101XOR运算结果为0000。这下明白为啥这个象棋残局注定是谁先走谁输了吧!这就是数学的魅力。
  当然,象棋的走法相比于石子游戏更复杂,规则也更多。但是只要抓住它们在逻辑上的共同点,也就可以把这两个看起来毫不相关的游戏当作同一个游戏来玩了。本文到此结束,因为已经“授人以渔”,所以我不会列出破解残局的棋谱,更无必要讲述此局中繁杂的变化。
这是个寂寞却幸福的城市,这是个声音与耳朵相恋的城市 93you.com
发表于 2013-2-7 21:28:11 | 显示全部楼层
努力回帖下载节目
这是个寂寞却幸福的城市,这是个声音与耳朵相恋的城市 93you.com
发表于 2013-2-7 21:29:21 | 显示全部楼层
努力回帖下载节目
这是个寂寞却幸福的城市,这是个声音与耳朵相恋的城市 93you.com
您需要登录后才可以回帖 登录 | 注册居民

本版积分规则

唯一的遗憾是我们连一张合照都没有。

就想游设计 ( 桂ICP备13002329 | 桂公网安备 45030502000286号 )|手机版|Archiver|

Powered by Discuz! © 2007-2024 就想游城市原创风格 Jokke Design

GMT+8, 2024-3-29 20:34