Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 动态规划:棋盘_Algorithm_Dynamic Programming - Fatal编程技术网

Algorithm 动态规划:棋盘

Algorithm 动态规划:棋盘,algorithm,dynamic-programming,Algorithm,Dynamic Programming,一辆车从标准的8乘8棋盘的左上角开始。两名玩家轮流将车水平向右或垂直向下移动,任意移动方块数。 不允许静止移动,玩家1先走。获胜者是将车放在右下角正方形的玩家。说出谁将获胜,并描述获胜策略 我有上述问题,我想看看其他人会如何处理这个问题。我知道有办法计算出这辆车可以走的不同路线。我试着用手解决这个问题,看起来2号选手总是赢,但我可能想得太简单了。以动态编程的方式处理它似乎是一个很好的方法。无论如何,任何人都有任何见解、算法或类似的方法来解决这个问题 H8是一个赢家框,因此它上面和左边的所有内容

一辆车从标准的8乘8棋盘的左上角开始。两名玩家轮流将车水平向右或垂直向下移动,任意移动方块数。 不允许静止移动,玩家1先走。获胜者是将车放在右下角正方形的玩家。说出谁将获胜,并描述获胜策略

我有上述问题,我想看看其他人会如何处理这个问题。我知道有办法计算出这辆车可以走的不同路线。我试着用手解决这个问题,看起来2号选手总是赢,但我可能想得太简单了。以动态编程的方式处理它似乎是一个很好的方法。无论如何,任何人都有任何见解、算法或类似的方法来解决这个问题

H8是一个赢家框,因此它上面和左边的所有内容都是输家框

G7(G8和H7)右侧和下方的所有内容都是输家框,因此它是赢家框

G7是一个赢家盒子,所以它上面和左边的所有东西都是输家盒子

等等

开始游戏的玩家一只能选择进入输家框,所以玩家二总是赢


第二名玩家每次轮到他时都要移动到一个w格。

第二名玩家总是赢得任何大小的棋盘。通过对电路板尺寸的归纳证明

n=1的情况可以忽略,因此从n=2开始;很明显,玩家2在2x2板上获胜

假设玩家2总是在大小为n或更小的棋盘上获胜。在大小为n+1的棋盘上,玩家1移动到左列或顶行的某个位置。然后,玩家2移动到对角线上的一个位置(这就是你需要的全部策略),这是一个大小为n或更小的棋盘上的起始位置


QED

A获胜位置具有以下属性:

  • 所有的终点站都赢了。在这种情况下,位置(8,8)是一个获胜的位置
  • 所有能够在一步中达到目标位置的位置都是获胜位置。即,最后一行或最后一列中的所有位置都是获胜位置
  • 如果我们可以移动到一个失败的位置,那么我们就处于一个胜利的位置,因为下一个玩家无法赢得比赛
  • 如果我们只能进入一个胜利的位置,那么我们就处于一个失败的位置
考虑到这一点,我们可以创建一个算法,可以告诉我们当前位置是赢家位置还是输家位置。使用表格(
dpTable
)存储以前计算的结果将避免重复计算

布尔值(整数x,整数y){
if(dpTable[x][y]!=null)
返回dpTable[x][y];
//从最后一行或最后一列来看,我们总能赢得这场比赛
如果(x==n | | y==n)
返回true;

对于(int i=1;x+i我认为值得注意的是,所描述的游戏实际上是一个两堆七枚硬币的游戏。Nim游戏的赢家可以通过对每堆硬币的数量进行XOR运算来确定。他们称之为Nim sum,它给出了一个Sprague Grundy函数的值。每当Nim sum为正时,位置就是赢家。因此考虑你的游戏:7^7=0,这是一个失败的位置。每个对角线位置都是失败的,因为无论
x
是什么,
x^x
总是0。

好的一面是,使用这种技术,你可以在三维和任意大的空间中玩(并赢得)这场游戏,以及在4维、5维等空间中。

解释“不允许静止移动”。@RBarryYoung,因为在你的回合中你不能传球(你不能说你的行动是停留在目前的位置,因为这会导致僵局)。你必须始终向右或向下移动。你是否尝试过玩这个游戏?你可能能够推理出一个获胜的策略,而不是求助于使用计算机。像这样的游戏可以用组合博弈论进行分析(与纳什的经济博弈论无关)。特别是,你的博弈是一场公正的博弈——双方的可能动作是相同的。感谢你提供了图表。这对描述很有帮助