棋软收藏站
设为首页
加入收藏
联系我们
  网站首页  |  中国象棋  |  围棋软件  |  五子棋  |  国际象棋  |  开局库  |  棋牌软件  |  棋书棋谱  |  棋软知识  |  精品软件  |  技术教程
搜索: [高级搜索]
您的位置: 首页 > 棋软知识
中国象棋残局的二进制数学解法象棋残局盲公顶棍
作者:不详       时间:2018-11-10

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

  下面来说一下这个游戏的求胜方法。首先把每一排的石子数量的十进制数转化成二进制数。我们会得到0001、0011、0101、0111。然后我们对这个数连续进行XOR运算(二进制逻辑异或运算),简单理解为不进位的二进制加法运算。即0001XOR 0011=0010,0010 XOR 0101=0111,0111 XOR 0111=0000。如果初始值为0000就注定谁先拿谁就要输了。
  例如,你先拿了第4排的1颗石子。剩余石子对应的数值分别为,0001、0011、0100、0111,XOR运算的结果为0001;轮到我拿了,我就拿走第1排的1颗石子,此时剩余石子对应的数值为0011、0100、0111,XOR运算的结果为0000;这样依次类推下去,只要你拿完了,XOR运算的结果就不会是0000,我只要再拿掉一些石子,使结果恢复到0000即可。当然,对于不同的局面,使XOR运算结果恢复到0000的方法是不同的,而且也可能同时存在多种恢复方法。反复使用这种过程,就可以保证我在最后一次拿光剩余的石子,也就是我赢了。数学证明略。如果你看懂了,再按照上述方法演示几次,就可以掌握这个游戏的取胜之道了。
  言书归正传,让我们回头来再看前面的象棋残局。把棋盘上一路的兵之间可走的步数看作1,把五路炮之间可走的步数看作4,把九路炮之间可走的步数看作5。转化成对应的二进制为0001、0100、0101,XOR运算结果为0000。这下明白为啥这个象棋残局注定是谁先走谁输了吧!这就是数学的魅力。
  当然,象棋的走法相比于石子游戏更复杂,规则也更多。但是只要抓住它们在逻辑上的共同点,也就可以把这两个看起来毫不相关的游戏当作同一个游戏来玩了。本文到此结束,因为已经“授人以渔”,所以我不会列出破解残局的棋谱,更无必要讲述此局中繁杂的变化。

按字母检索

网站首页 | 代码编辑 | 计算器 | 网站地图 | 广告服务 | 收录地图 | 网站连接 | 在线象棋