资源描述:
《独立钻石棋成文》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、独立钻石棋1.独立钻石棋的历史与起源在距今大约两百多年,法国大革命前夕,著名的巴士地狱关着一位叫让·诺的贵族,他独自一个人关在铁窗里,为了打发时间,就设计出一种能够自己玩的游戏,就是“独立钻石”(Solitaire)(又称“单身贵族棋”)。这位贵族囚犯,每日沉迷于自己发明的游戏,后来更是在整个巴士底狱盛行,公元1789年7月14日,巴黎人民武装起义,攻破巴士底狱,而使得这个游戏在社会各阶层流传开来。这个玩意在十八世纪末才传至英国,及后渐渐流行于世界各地。在我国称它为孔明棋,也叫跳弹珠,或者叫“Pegg
2、ed”有人说孔明棋是三国时期的诸葛亮所发明的益智棋,失传后又来辗转流传到日本、欧美,成为外国普及的益智游戏。独立钻石棋、华容道、魔方被称为智力游戏界的三大不可思议,它们都含有很深的数学原理。2.独立钻石棋的游戏规则这游戏的棋盘有多种式样,不过最流行的式样,是一个圆形的板。板上有三行平行的小孔,和另外三行平行的小孔,相交织成十字形。每行的孔数有七个,故此一共有33个小孔。而棋子一般是一些头略粗的木粒子或玻璃弹子。玩法是在棋盘33孔中,每孔都放下一棋,但是取中心的一孔是空着的。玩的时候是像跳棋一样行子。一
3、棋子依直线在平行或垂直(不能依斜线)的方向跳过一棋子,而放在此棋子之后的一个空格内。故此,棋子后必要有空的孔才可跳过。每次棋子跳去一个空孔,被跳过的棋便移离棋盘。这时棋盘上便少了一只棋子。如此一直玩下去,使剩下来的棋子越少越好。独立钻石的棋盘有很多种变形,这个棋盘就是最初的样子,走法就是按照跳棋的走法,但是被跳过的棋子全部被吃掉,这样每跳一下棋盘上的棋子就会少一颗,而如果像跳棋那样连跳,每步就可能吃掉很多颗棋子。游戏的目的是要使棋盘上留下来的棋子越少越好。如果最后剩一子,而且正好位于棋盘正中心的第44
4、号洞孔上,那就是最好的结果。此种局势称为“独立(粒)钻石”。3.独立钻石棋的解法图:5412631098711121315141617181920222123242526272928303132331908年以前,人们认为要23步才可以得“天才”1908年,都丹尼将纪录变成19步就可以得“天才”1912年,布荷特创下18步之后,最少要18步才可以得“天才”1986年,万萍萍也用了18步。后来,运用上海的计算机,人们发现只有两个18步得“天才”的方法布荷特的走法:29-1726-2433-2518-30
5、6-1813-1110-1227-13-1123-2521-238-10-12-26-24-2231-33-25-111-916-43-1-97-21-2328-16-4-6-18-1615-17用C语言程序表示#include int map[7][7]={{2,2,1,1,1,2,2},{2,2,1,1,1,2,2},{1,1,1,1,1,1,1},{1,1,1,0,1,1,1},{1,1,1,1,1,1,1},{2,2,1,1,1,2,2},{2,2,1,1,1,2,2}};s
6、truct jump{ int x1,y1,x2,y2;} l[32];int p=0;bool move(int x1,int y1,int x2,int y2);main(){ if(!move(1,3,3,3))printf("Failure!");}bool move(int x1,int y1,int x2,int y2){ bool tmp=false; int i,j; if(0<=x2&&x2<=7&&0<=y2&&y2<=7&&map[x2][y2]
7、==0&&map[(x1+x2)/2][(y1+y2)/2]==1) { map[x2][y2]=1;map[x1][y1]=0;map[(x1+x2)/2][(y1+y2)/2]=0; l[p].x1=x1;l[p].y1=y1;l[p].x2=x2;l[p].y2=y2;p++; if(p==31&&map[3][3]==1) { for(i=0;i
8、 if(i%5==0)printf(""); printf("(%d,%d)->(%d,%d) ",l[i].x1,l[i].y1,l[i].x2,l[i].y2); } tmp=true; } for(i=0;i<7&&!tmp;i++)for(j=0;j<7&&!tmp;j++)if(map[i][j]==1) tmp