我有一个程序正在搜索迷宫,以找到最佳的出路。搜索时,将下一步移动到数组。我的问题是,它不断重复相同的三个动作。我需要找到检查移动数组的最佳方法,以便在检测到循环时强制其更改移动。
编辑清楚,
http://www.logicmazes.com/theseus.html迷宫三是我正在测试的迷宫。发生的情况是它在开始的列中卡住了上下移动。
最佳答案
听起来问题是您的“状态”实际上没有包含足够的状态信息。在每个周期中,These修斯移动并且牛头怪移动了两次之后,该状态包括以下内容:
us修斯的x坐标。
us修斯的y坐标。
牛头怪的x坐标。
牛头怪的y坐标。
您可以将它们表示为某种MazeState
对象,该对象的equals
和hashCode
方法可以轻松查看两个实例是否表示相同状态。
由于Minotaur的动作遵循非常严格的程序,因此,us修斯进行的每一个动作(左/右/上/下/延迟)都会从一种定义明确的状态转移到另一种状态。然后,您需要禁止These修斯采取任何行动:
将导致Minotaur的x和y坐标等于These修斯的坐标(因为这意味着These修斯已经死了)。
会使新状态等于您以前所处的状态(因为这意味着尚未取得任何进展)。
为此,您可以将以前的状态存储在HashSet<MazeState>
中。