Matrix 数学棋盘游戏?

Matrix 数学棋盘游戏?,matrix,puzzle,chess,Matrix,Puzzle,Chess,我正试图找到一个解决这个棋盘游戏问题的方法,这就是它的发展 迈克和鲍勃正在一个m乘n的棋盘上玩棋盘游戏。电路板至少有3行3列。最下面一行是第0行,最上面一行是第m行− 1.最左边的列是第0列,最右边的列是第n列− 一, 迈克先移动,然后是鲍勃,然后是迈克,然后是鲍勃,等等,直到比赛结束。当两件事中的一件发生时,游戏结束了:鲍勃赢了或迈克赢了 如果鲍勃在迈克到达第一排之前和迈克降落在同一个广场上,他就赢了。请注意,只有在Bob移动后才检查此获胜条件;迈克搬家后,鲍勃永远不会马上赢,即使迈克和鲍勃

我正试图找到一个解决这个棋盘游戏问题的方法,这就是它的发展

迈克和鲍勃正在一个m乘n的棋盘上玩棋盘游戏。电路板至少有3行3列。最下面一行是第0行,最上面一行是第m行− 1.最左边的列是第0列,最右边的列是第n列− 一,

迈克先移动,然后是鲍勃,然后是迈克,然后是鲍勃,等等,直到比赛结束。当两件事中的一件发生时,游戏结束了:鲍勃赢了或迈克赢了

  • 如果鲍勃在迈克到达第一排之前和迈克降落在同一个广场上,他就赢了。请注意,只有在Bob移动后才检查此获胜条件;迈克搬家后,鲍勃永远不会马上赢,即使迈克和鲍勃落在同一个广场上
  • 如果迈克在鲍勃获胜之前到达第一排,迈克获胜,即迈克在没有鲍勃的情况下到达第一排 曾经和迈克降落在同一个广场上。迈克一到第一排,迈克就赢了(鲍勃不能动了) 再也没有了)
迈克在每一个回合的移动都是根据以下规则固定的:他向上移动1个方格,然后,如果还没有到达终点的话 右边缘,也向右移动1个正方形

相比之下,鲍勃在轮到他时有八种选择:

  • 1向上,2向右
  • 1向上,2向左
  • 1向下,2向右
  • 1下,2左
  • 2向上,1向右
  • 2向上,1向左
  • 2下1右
  • 2下1左
  • 注意,根据Bob的位置,某些移动可能不可用;例如,如果Bob已经在列中 N− 1,则不允许尝试向右移动

    根据Mike和Bod的起始位置,提出一个决定游戏结果的解决方案,如下所示:

    • 如果Bob有可能获胜,则报告Bob能够获胜,并给出他获胜所需的Bob最少移动次数
    • 否则,迈克赢了;报告Mike获胜前Bob移动的次数
    我们可以假设

    • 迈克的出发位置从来都不在第一排
    • 鲍勃的出发地点和迈克的不一样
    我们可以使用我们喜欢的任何类型的方法,解决这个问题的唯一真正限制是上面提到的。我们将如何处理这样的问题

    符号 首先请注意,Mike有一个固定的、预定义的移动策略

    让我们用M0,M1,…,Mk来表示迈克在通向最上面一行的路径中要经过的单元格。这里M0是Mike的起始单元格,Mk是顶层的单元格,如果Bob不干预,Mike将到达该单元格

    此外,让我们用B0表示Bob开始的单元格。根据声明,可以保证B0与M0不同

    重新制定 问题是Bob是否有一系列的i移动,B0->B1->..->对于介于1和k-1之间的i,Bi=Mi

    方法 一种可能的方法是为任何i生成所有可能的单元格列表,这些单元格可以在i移动中精确到达

    对于i=0,Bob可以到达单个单元格,即起始位置B0

    之后,对于i=1,2。。K- 1,我们应该考虑在I—1步骤中可以达到的每个细胞(我们已经知道这组细胞),并且为鲍伯执行每个法律动作。由此产生的位置列表将是在i步中可到达的单元集

    既然我们找到了Bob在i步中可以到达的单元格,那么我们应该简单地检查Mi是否在该集合中。如果在1和k-1之间至少有一个i发生这种情况,那么Bob获胜

    实施 为了提高效率,重要的是要确保如果在相同的步骤数i中从不同的来源到达相同的单元格,则重复项只存储一次

    这种重复项的删除是必要的,因为否则可到达单元列表的大小将随着i指数增长

    一种方法是为每个i维护一个m×n布尔矩阵,指定是否可以在i步中到达相应的单元。内存方面的改进是可能的,因此只保留当前i的布尔矩阵(以及一个临时矩阵,以帮助向下一组前进),但在这种情况下需要更加小心。

    首先请注意,Mike有一个固定的、预定义的移动策略

    让我们用M0,M1,…,Mk来表示迈克在通向最上面一行的路径中要经过的单元格。这里M0是Mike的起始单元格,Mk是顶层的单元格,如果Bob不干预,Mike将到达该单元格

    此外,让我们用B0表示Bob开始的单元格。根据声明,可以保证B0与M0不同

    重新制定 问题是Bob是否有一系列的i移动,B0->B1->..->对于介于1和k-1之间的i,Bi=Mi

    方法 一种可能的方法是为任何i生成所有可能的单元格列表,这些单元格可以在i移动中精确到达

    对于i=0,Bob可以到达单个单元格,即起始位置B0

    之后,对于i=1,2。。K- 1,我们应该考虑在I—1步骤中可以达到的每个细胞(我们已经知道这组细胞),并且为鲍伯执行每个法律动作。由此产生的位置列表将是在i步中可到达的单元集

    既然我们找到了Bob在i步中可以到达的单元格,那么我们应该简单地检查Mi是否在该集合中。如果在1和k-1之间至少有一个i发生这种情况,那么Bob获胜

    实施 为了提高效率,重要的是要确保如果在相同的步骤数i中从不同的来源到达相同的单元格,则重复项只存储一次

    这种重复项的删除是必要的,因为否则可到达单元列表的大小将随着i指数增长

    一种方法是进行并购