我必须在 Java 中运行广度优先搜索以获取作业。我有一个 5x5 的瓷砖网格(总共 24 个 - 1 个瓷砖是“空白的”)。搜索的重点是通过向上、向下、向左或向右移动“空白”来重新排列拼贴,最终将拼贴重新排列为正确的顺序。
为了进行这个搜索,我创建了一个 Arraylist 'queue'。我有一个方法可以获取这个数组列表索引 0 处的状态,找到可以遵循的每个合法移动,然后将它们分别添加到数组列表的末尾。
从理论上讲,这一直持续到最终找到“目标状态”。问题是,当我运行搜索时,“队列”数组列表继续变得越来越大。今天我让它运行了几个小时,仍然没有找到解决方案。
这表明我可能以错误的方式解决了这个解决方案,并且有一种更好的方法可以让我在 Java 中进行广度优先搜索。我知道我的解决方案确实有效(最终),因为当我使用与目标状态相差不大的开始状态时,找到正确的路径并不需要太长时间。但是,我已经获得了一个可以使用的开始状态,不幸的是,它与目标状态相去甚远!!!
任何提示或提示将不胜感激!