2
results
for 博弈
给你一个整数数组
nums
。玩家 1 和玩家 2 基于这个数组设计了一个游戏。玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是
0
。每一回合,玩家从数组的任意一端取一个数字(即,nums[0]
或nums[nums.length - 1]
),取到的数字将会从数组中移除(数组长度减1
)。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。如果玩家 1 能成为赢家,返回
true
。如果两个玩家得分相等,同样认为玩家 1 是游戏的赢家,也返回true
。你可以假设每个玩家的玩法都会使他的分数最大化。两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动。
图的形式是:
graph[a]
是一个列表,由满足ab
是图中的一条边的所有节点b
组成。老鼠从节点
1
开始,第一个出发;猫从节点2
开始,第二个出发。在节点0
处有一个洞。在每个玩家的行动中,他们 必须 沿着图中与所在当前位置连通的一条边移动。例如,如果老鼠在节点
1
,那么它必须移动到graph[1]
中的任一节点。此外,猫无法移动到洞中(节点
0
)。然后,游戏在出现以下三种情形之一时结束:
- 如果猫和老鼠出现在同一个节点,猫获胜。
- 如果老鼠到达洞中,老鼠获胜。
- 如果某一位置重复出现(即,玩家的位置和移动顺序都与上一次行动相同),游戏平局。
给你一张图
graph
,并假设两位玩家都都以最佳状态参与游戏:- 如果老鼠获胜,则返回
1
; - 如果猫获胜,则返回
2
; - 如果平局,则返回
0
。