2个组合游戏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2个组合游戏相关的知识,希望对你有一定的参考价值。

对于先手而言

必败状态(P position)-->所有后继都是必胜状态

必胜状态(N position)-->有一个后继是必败状态

没有后继的状态是必败状态

 




1.Ferguson博弈

进行游戏需要用到两个盒子,在游戏的开始,第一个盒子中有n枚石子,第二个盒子中有m个石子(n, m > 0)。参与游戏的

名玩家轮流执行这样的操作:清空一个盒子中的石子,然后从另一个盒子中拿若干石子到被清空的盒子中,使得最后两个

盒子都不空。当两个盒子中都只有一枚石子时,游戏结束。最后成功执行操作的玩家获胜。找出游戏中所有的P位置。

(1)topo序(m+n)递推

(2)对于一个位置(x, y)来说,如果x, y中有一个偶数,那么(x, y)是N(必胜)位置。如果x和y都是奇数,那么(x, y)是P位置(必败)

 

技术分享
证明:
证明结论:(x,y)至少一偶时,先手胜;都为奇时,先手败

证明:
(x,y)=(1,1)时是先手必败态,下对max(x,y)>1进行归纳

1、当max(x,y)=2时,即(x,y)=(1,2)或(2,1)或(2,2),先手留下一个2分为(1,1),先手获胜。
即当max(x,y)=2时结论成立。

2、假设max(x,y)<k时结论都成立,现证max(x,y)=k时结论成立。
若(x,y)中有一个偶数(设为a),先手将另一个清空,把偶数a分为两个奇数b和c,由于b、c<a 小于等于 k,即
max(b,c)<k,由假设,在(b,c)位置上后手作为新先手必败,故先手胜。

若(x,y)都为奇数,先手只能保留一个奇数并将其分解为一奇a一偶b,由于max(a,b)<max(x,y)=k,由假设,在(a,b)位
置上后手作为新先手必胜,故先手败。
View Code

 


2.Chomp!游戏

有一个n*m的棋盘,每次可以取走一个方格并拿掉它右边和上面的所有方格。拿到左下角的格子(1,1)者输,如下图是8*3的

棋盘中拿掉(6,2)和(2,3)后的状态。

 

技术分享

 

结论:答案是除了1*1的棋盘,对于其他大小的棋盘,先手总能赢。

证明如下:

如果后手能赢,也就是说后手有必胜策略,使得无论先手第一次取哪个石子,后手都能获得最后的胜利。那么现在假设先手

取最右上角的石子(n,m),接下来后手通过某种取法使得自己进入必胜的局面。但事实上,先手在第一次取的时候就可以和

后手这次取的一样,进入必胜局面了,与假设矛盾。

约数游戏:有1~n个数字,两个人轮流选择一个数字,并把它和它的约数擦去。擦去最后一个数的人赢,问谁会获胜。

分析:类似巧克力游戏,得到结论就是无论n是几,都是先手必胜。

 

以上是关于2个组合游戏的主要内容,如果未能解决你的问题,请参考以下文章

如何组合绑定片段而不将它们包装在 XML 文字中

2个组合游戏

JavaScript 代码片段

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器

「游戏引擎 浅入浅出」4.3 片段着色器