巴什博弈

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=8m=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;
}
posted @ 2022-04-04 16:11  LibraXiong  阅读(211)  评论(0)    收藏  举报