数学棋盘游戏Puzzel?

时间:2017-03-26 22:41:54

标签: matrix puzzle chess

大家好我想找到解决这个棋盘游戏问题的方法就是这样。

迈克和鲍勃在一块木板上玩棋盘游戏。该板至少有3行3列。底行是第0行,第一行是第m - 1行;最左边的列是第0列,最右边的列是第n - 1列。

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

  • 鲍勃赢了,如果他在迈克到达顶排之前与迈克在同一个广场上。请注意,只有在Bob移动后才会检查此获胜条件;在迈克移动之后,鲍勃永远不会赢,即使迈克和鲍勃一样落在同一个广场上
  • 如果迈克在鲍勃获胜之前到达最高排,麦克获胜,即迈克在没有鲍勃的情况下达到了最高位 和迈克一样登上同一个广场。一旦迈克到达第一排,迈克就赢了(鲍勃不能动弹 了)。
迈克在每一回合的动作都是根据以下规则确定的:他走了1平方,然后,如果不是已经在 右边缘,也向右移动1个方格。

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

  1. 1 up,2 right
  2. 1 up,2 left
  3. 1 down,2 right
  4. 1 down,2 left
  5. 2 up,1 right
  6. 2 up,1 left
  7. 2 down,1 right
  8. 2 down,1 left
  9. 请注意,根据Bob的位置,某些动作可能不可用;例如,如果Bob已经在列中 n - 1,然后不允许任何试图向右移动。

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

    • 如果Bob有可能获胜,那么报告Bob可以获胜并给出他获胜所需的最小鲍勃数量。
    • 否则,迈克获胜;报告在Mike获胜之前发生的Bob移动数量

    我们可以假设

    • Mike的起始位置永远不会排在第一位
    • Bob的起始位置与Mike的
    • 完全不同

    我们可以使用我们喜欢的任何类型的方法,上面提到了解决这个问题的唯一真正的限制。我们如何处理这样的问题。

    谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

符号

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

让我们用M 0 ,M 1 ,...,M k 表示Mike将在他的路径中经过的细胞顶行。这里M 0 是Mike的起始单元格,而M k 是Mike如果Bob不介入则会到达顶行的单元格。

另外,让我们用B 0 表示Bob开始的小区。根据声明,保证B 0 与M 0 不同。

再形成

问题是Bob是否存在 i 移动序列,B 0 - > B 1 - > .. - > B i 使得B i = M i i 在1和 k之间 em> - 1。

方法

一种可能的方法是生成完全 i 移动中可以到达的所有可能单元格的列表,对于任何 i

对于 i = 0,Bob可以访问一个单元格,起始位置B 0

之后,对于 i = 1,2,... k - 1,我们应该考虑 i 中可以到达的每个单元格 - 1步(我们已经知道这组单元),并为Bob执行每个合法的移动。得到的位置列表将是 i 步骤中可到达的单元格集。

现在我们找到了Bob可以在 i 中找到的单元格,我们应该只检查M i 是否在该集合中。如果在1和 k - 1之间至少有一个 i 发生这种情况,那么Bob就会胜出。

实施

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

删除重复项是必不可少的,因为否则可访问单元格列表的大小会随着 i 呈指数级增长。

一种方法是为每个 i 维护 m 的布隆 n 矩阵,指定是否可以到达相应的单元格 i 步骤。内存方面的改进是可能的,这样只保留当前 i 的布尔矩阵(以及一个临时矩阵,以帮助推进到下一组),但需要更多的关注在这种情况下需要。

答案 1 :(得分:0)

旧话题,但我有点困惑: 从一般观察开始 在3乘3的板上,迈克在恰好4个起始位置上获胜,即鲍勃必须移至(1,2)的位置(此处的坐标顺序为m在n之前,即国际象棋符号并不常见),而Mike可以移至该位置。 如果鲍勃(Bob)移至迈克(Mike)的广场,迈克(Mike)可以赢得下一个举动或根本不会获胜,因为他通常需要从鲍勃(Bob)的广场到鲍勃(Bob)的下一个广场两个举动。 因此,只要Bob沿对角线移动,就只取决于距离和速度(Mike快50%,只需计算到Bob的对角线的距离即可)。 在右边界,Mike的速度提高了100%。他仍然必须追赶高位。另外,如果两个球员在一个回合上都以不同的颜色结束比赛,那么迈克就无法取胜。