其他分享
首页 > 其他分享> > Nim游戏

Nim游戏

作者:互联网

二人游戏 有k>=1堆硬币,每堆有n1,n2~~~nk个硬币,取得最后一枚硬币的人获胜。

规则:每个玩家轮番出场.2.当轮到一个玩家取子时,至少从非空的硬币堆中取得一枚硬币.

先考虑两堆的状况,在k=2时,有两堆硬币,分别有8个和5个硬币。

8,5
5,5
5,2
2,2
0,2
0,0

可见,在两堆的状况下,数目的大小不是关键,关键是硬币数目是否相等。在n1!=n2的状况下 一定有先手必胜的策略。因为先手玩家总是可以通过取硬币使得两堆硬币的数目相等。

而后手的玩家因为一定要取硬币,造成两堆硬币不同.到最后,一定会出现一个硬币堆空,此时先手玩家再取得另外一个硬币的所有硬币,所以先手必胜.

然后我们再考虑K堆的情况.对于含有n个硬币的硬币堆,我们用二进制数表示这个硬币堆.

比如 53的二进制数目可表示为110101,将53拆分为2^5+2^4+2^2+2^0子堆.然后将所有的硬币都像上面那样拆分成不同的子堆。

统计子堆 2^0,2^1,2^2, .....2^n的数目,若它们全为偶数,则称该游戏是平衡的,否则是不平衡的。

玩家1(先手),能在非平衡的游戏中获胜,玩家(2)一定能在平衡的游戏中获胜。

怎么理解呢?

对于一个非平衡的游戏,我们总是能通过取对应的最大不平衡堆上的硬币,使这个游戏变成平衡态的.从平衡态中无论怎么取硬币,一定会转移到非平衡状态中。而处于平衡状态(此时它要取)中貌似是必输的。

 

然后是更为重要的一个推论:

若所有硬币数目的异或和为0,则先手必输,否则先手必胜.

证明: 用到了上面的结论 ,若所有堆数均为偶数,则是平衡态,则玩家2必胜即先手必输.

 8421
70111
91001
121100
91111

可见,1,2,8子堆的个数是奇数,对应的异或和不为0,则总的异或和一定不为0.此时先手必胜.

若所有的子堆个数都是偶数,对应堆的各自异或和必为0,此时先手必胜.

 

标签:游戏,硬币,两堆,Nim,玩家,必胜,异或,平衡
来源: https://blog.csdn.net/qq_36018057/article/details/112060666