巴什博弈
kiki's game
题目描述
最近琪琪无所事事。 当她无聊的时候,一个想法出现在他的脑海里,她只是玩棋盘游戏。 棋盘的大小是n*m。 首先,将一枚硬币放在右上角(1,m)。 每次有一个人可以把硬币移到左边,下面或左下角的空白区域。 不能动的人就会输掉这场游戏。 琪琪和zz一起玩,游戏总是以琪琪开始。 如果双方都能完美发挥,谁将赢得比赛?
输入示例
输入: 5 3
输出: What a pity!
解释: kiki输掉了这场比赛。
输入: 5 4
输出: Wonderful!
解释: kiki赢了这场比赛。
解题思路
巴什博弈的资料:
只要把PN状态图描绘出来就行了:
P:面对P时先手必输
N:面对N时先手必胜
现在关于P,N的求解有三个规则。
(1):最终态都是P,可以理解成对方已经到达了终点,然后自己选择。
(2):按照游戏规则,到达当前态的前态都是N的话,当前态是P
(3):按照游戏规则,到达当前态的前态至少有一个P的话,当前态是N
当n=8,m=9时的PN图如下:
| N | N | N | N | N | N | N | N |
|---|---|---|---|---|---|---|---|
| P | N | P | N | P | N | P | N |
| N | N | N | N | N | N | N | N |
| P | N | P | N | P | N | P | N |
| N | N | N | N | N | N | N | N |
| P | N | P | N | P | N | P | N |
| N | N | N | N | N | N | N | N |
| P | N | P | N | P | N | P | N |
- 先将终点标记为P,P所能到的地方标记为N。
- 然后沿着两边填,因为原来最左边沿只能向下走,最底部只能往左走。
- 然后填写中间的内容。
代码
public boolean helper(int n,int m){
if(n%2==0||m%2==0) return true;
else return false;
}

浙公网安备 33010602011771号