You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用A*算法求解8数码问题时,如何避免选取旧步数棋盘?

关于A*算法求解8数码问题的疑问解答
  • 先明确关键前提:队列里的每一个棋盘状态,都是从初始状态通过合法移动一步步生成的。只有合法移动得到的相邻棋盘才会被加入队列,所以所有队列中的状态本身都是合法且可达的,不存在“不合法”的状态。
  • 你担心的“从当前处理的棋盘移动到旧相邻棋盘不合法”是个误解——A*每次取出优先级最低的状态时,并不是从当前刚处理的棋盘“移动”过去,而是直接处理这个状态本身。这个旧状态能进入队列,本身就证明它是通过合法路径来的,只是可能之前有更优的路径先被处理了。
  • 至于你从没遇到这种情况,核心原因是曼哈顿距离作为启发函数是可采纳的(不会高估到目标的剩余步数)。当某个状态第一次被从队列中取出时,我们就已经找到了到达它的最短路径。队列里如果还有这个状态的旧版本(路径步数更多),它的优先级(步数+曼哈顿距离)肯定比已取出的版本高,永远不会成为优先级最低的候选,自然不会被选中处理。

内容的提问来源于stack exchange,提问作者Ivica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:52:05