Artificial intelligence 如何防止*搜索重复路径

Artificial intelligence 如何防止*搜索重复路径,artificial-intelligence,a-star,sliding-tile-puzzle,Artificial Intelligence,A Star,Sliding Tile Puzzle,我正在做8个拼图的挑战,在那里我必须以最短的路径成本以正确的顺序排列瓷砖。 对于我的启发,我结合了#错放的瓷砖+n个瓷砖到目标位置的距离 目标是 1 2 3 8 0 4 7 6 5 对于这样的难题 1 2 3 7 8 4 6 0 5 它工作得非常好 但在这种配置下 1 3 4 8 0 2 7 6 5 它无限地选择这个组合作为最短的组合 (一) (二) 然后1)然后2)如果您查看上的算法伪代码,您会注意到它们命名为closedSet。这是一个集合,您可以在其中存储已扩展的状态(已为其生成后

我正在做8个拼图的挑战,在那里我必须以最短的路径成本以正确的顺序排列瓷砖。 对于我的启发,我结合了#错放的瓷砖+n个瓷砖到目标位置的距离

目标是

1 2 3
8 0 4
7 6 5
对于这样的难题

1 2 3 
7 8 4
6 0 5
它工作得非常好

但在这种配置下

1 3 4
8 0 2
7 6 5
它无限地选择这个组合作为最短的组合

(一)

(二)


然后1)然后2)

如果您查看上的算法伪代码,您会注意到它们命名为
closedSet
。这是一个集合,您可以在其中存储已扩展的状态(已为其生成后续状态)。然后,通过所有继任者(或伪代码中的邻居)的循环从以下内容开始:

if neighbor in closedSet
    continue        // Ignore the neighbor which is already evaluated.
这段代码的目的是准确地防止您的问题发生

请注意,为
closedSet
选择的数据结构将显著影响算法的运行时间。它不应该像列表一样,检查对象是否已经在其中需要在整个列表中循环。相反,您需要查看类似哈希映射/集的内容(确切的术语取决于您对编程语言的选择)。

请查看。
1 3 4
8 0 2
7 6 5
if neighbor in closedSet
    continue        // Ignore the neighbor which is already evaluated.