孔明棋

跳转原文

说明:写完才发现,文中的很多截图都被csdn打上水印,其实这些截图都来自上述原文,尊重原著!!




根据WIKI孔明棋应该起源于欧洲,原名pegged, 不知道现在怎么和诸葛亮扯上了关系。规则和跳棋相似,但是一个人就可以玩,目标是按照规则移动棋子,最终只有一个棋子留在棋盘上。发展至今,pegged已经发展出很多新的形式,但是最典型的是如下形式


33个棋子,起始可以任意取走一个棋子,典型的第一步是取走中心的棋子,然后按规则移动棋子。 现在的问题是:计算机可以玩这个游戏吗?

考虑下解空间的规模,33个棋子,最终要剩下1个棋子,一个bit表示一个位置上是否有棋子,则可能布局一共有2^32个,在64位机器的时代,这个数不算什么。考虑暴力穷举,从第一步开始就是遍历树,因为只有32个棋子,所以树的深度最大32,深度优先遍历,单纯的递归也可以处理,github上似乎已经有开源的代码了,还利用了hash做剪枝。

本文的重点是翻译开头的网页内容:用群论求解最后余下的那个棋子可能的位置
Peg Solitaire的规则很简单, Pegs可以在水平/竖直方向上跳过相邻的pegs,被跳过的Pegs被消除。

游戏的目的是消除到只剩一个pegs。在central solitaire中,玩家第一步取出的是位于中心的pegs。根据游戏说明,可以让最后一个pegs处于中心位置的人是天才,而其他可以取胜的人只能算是优秀的人。


不久以前,来自idaho大学的Arie Bialostocki利用群论证明最后取胜时,那余下的唯一的pegs只可能在五个位置(如上图的b)

例如,当最后一个pegs位于棋盘最右侧时,figure 1(c)展示的就是倒数第二个移动步骤。讽刺的是,同样是figure1(c)的状态,玩家同样可以让最后一个棋子处于中心位置,从而从“优秀”变成“天才”。有人会权衡两种结果的区别吗?就是因为这个神奇的现象引导Arie Bialostocki得到一个优雅的理论,如下所诉。


figure2(a)给棋盘上每一个位置设置一个字母x,y,z. the arrangement of letters is very special and has been noticed yet in the classic WW,page 706(译注:这一句的WW没看明白,故保留原句。这个字母的布局相当重要,至于怎么会出现如此特殊的设置,下文在另一个文献中或许有所体现,耐心看下去)处于某个字母位置上的pegs跳过另一个字母位置上的pegs总是会落在第三个字母的位置上。

在x,y,z上定义一个操作,用符号+表示(译注:只是借用加法符号,不要理解成加法运算)移动。比如上表的第一行x+y=z表示

peg 从x跳过y后一定会落到z标定的位置上,表中余下各行的含义相同。
定义的这个操作是可交换的。例如z+x=y,同时有x+z=y,所以z+x=x+z. 此外除了x+x,y+y,z+z操作+支持所有其他任意两个字母的操作。根据group theory,我们给出如下定义

x+x = y + y = z + z = 0

其中的0是一个新的符号,需要满足

x+0=x, y + 0=y, z + 0 = z

操作+的所有属性可以用如下的Cayley表说明

操作+的其他属性也可以从上述Cayley表中导出。三个非零符号x,y,z的和总是0( Does not this remind you of 3-purges? )

(译注:什么是3-purges???).同样我们可以考虑在一个布局中的所有pegs的和(如figure2b-c).例如在central solitaire中,中心

peg首先被去除,这个布局下所有pegs的和就是y,没有peg的那个位置对应的字母。当x跳过y会落到z。所以两个pegs x + y换一个peg z,所以游戏中按照规则移动一个pegs,不会改变布局中所有pegs的和。即在规则范围内,布局中所有peg的和不会随着pegs的移动而变化。进而

       按照规则移动pegs得到的任一布局中pegs的和总是y!
这个结论同样适用于游戏的最后一个布局:只有一个peg余下时的布局。

所以,最后剩下的唯一的peg所有可能的位置只能如figure3a所示。但是并不是所有位置都是可行的。因为初始的布局下同时对中心和线对称,而移动pegs也会保持这种对称。例如,如果最后的peg可能处于figure3b所示的位置,按照对称性,它也就有可能处于figure3c的位置。但figure3c的位置对应的字母时z,不是y,所以figure3c时不可行的位置,如此按照对称性,figure3b也不是可行的位置。而满足所有对称性的位置只有5个,如figure1b所示




译注:

解释一个疑问,figure2a中那个神奇的xyz设置是如何得到的? 1%的灵感?

http://alexandria.tue.nl/repository/freearticles/598441.pdf

这里wiki里给出的一个参考链接,上文的(x,y,z,0)实际是4阶的有限域,操作+是定义在这个有限域上的,有兴趣的可以阅读下



没有更多推荐了,返回首页