大家好我想找到解决这个棋盘游戏问题的方法就是这样。
迈克和鲍勃在一块木板上玩棋盘游戏。该板至少有3行3列。底行是第0行,第一行是第m - 1行;最左边的列是第0列,最右边的列是第n - 1列。 迈克首先移动,然后是鲍勃,然后迈克,然后是鲍勃等,直到比赛结束。当两件事情中的一件发生时,游戏结束了:鲍勃获胜或迈克获胜。请注意,根据Bob的位置,某些动作可能不可用;例如,如果Bob已经在列中 n - 1,然后不允许任何试图向右移动。
考虑到Mike和Bod的起始位置,提出一个决定游戏结果的解决方案,如下所示:
我们可以假设
我们可以使用我们喜欢的任何类型的方法,上面提到了解决这个问题的唯一真正的限制。我们如何处理这样的问题。
谢谢你的帮助。
答案 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%。他仍然必须追赶高位。另外,如果两个球员在一个回合上都以不同的颜色结束比赛,那么迈克就无法取胜。