java - 关于如何使用 A* 解决 Java 中的尖峰时刻谜题并获得最低移动次数的指南。需要有关如何开始和遵循的步骤的帮助

标签 java graph a-star

首先,我已经阅读了在 stackoverflow 或其他互联网搜索中可以找到的所有线程。我确实了解了不同的方面,但这并不完全是我所需要的。

我需要解决大小不超过 8 X 8 block 的高峰时段谜题。

正如我在标题中所述,我想使用 A*,作为它的启发式,我将使用: 阻挡红色汽车(需要排除的汽车)路径的汽车数量应该减少或保持不变。

我已经阅读了高峰时段的 BFS 解决方案。

我不知道如何开始,或者更好地说,要遵循什么步骤。

如果有人需要任何解释,这里是任务的链接:

http://www.cs.princeton.edu/courses/archive/fall04/cos402/assignments/rushhour/index.html

到目前为止,根据我读过的内容(尤其是来自 Polygenelubricants 的答案),我需要生成一个阶段图,包括初始阶段和“成功”阶段,并使用 A* 算法确定从初始到最终的最小路径?

我应该创建一个回溯函数来生成所有可能(有效)的移动吗?

正如我之前所说,我需要帮助来概述我需要采取的步骤,而不是遇到实现问题。

编辑:我是否需要生成所有可能的移动,以便将它们转换为图形节点,这不是很耗时吗?我需要在 10 秒内解决一个 8X8 的谜题

最佳答案

A* 是一种搜索 graphs 的算法。图表由 nodes 组成和边缘。因此我们需要用图表来表示您的问题。

我们可以将谜题的每个可能状态称为一个节点。如果两个节点仅通过一次移动就可以相互到达,则它们之间就有一条边。

现在我们需要一个起始节点和一个结束节点。 哪些拼图状态代表我们的起始节点和结束节点?

最后,A* 还需要一件事:admissable distance heuristic - 猜测完成拼图需要多少步。这种猜测的唯一限制是它必须小于实际的移动次数,所以实际上我们正在寻找的是一个最小界限。将启发式设置为 0 就可以满足这一点,但如果我们能够提出更好的最小界限,算法将运行得更快。 你能想出完成拼图所需的最小移动次数吗?

关于java - 关于如何使用 A* 解决 Java 中的尖峰时刻谜题并获得最低移动次数的指南。需要有关如何开始和遵循的步骤的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12061499/

相关文章:

algorithm - 创建授予用户权限所需的最少组

complexity-theory - A* 时间复杂度

java 如何让角色跟随寻路

java - 选择文件夹 Intent 并在 Intent 完成时进行锻炼?

java - 输出 HTML 或纯文本的 HTML + Javascript 渲染器?

java - 如果使用 double 将一种货币值与另一种货币值相互转换,可能会损失的最大精度是多少?

graph - 参数映射不能在 MERGE 模式中使用

python - 用 Python 表示图(数据结构)

c# - A* 搜索尖峰时刻游戏?

java - JSF-<h :commandButton> does not invoke new window from backing bean