A*:在 Rust 中打开和关闭列表

A*: open and close lists in Rust

我正在学习 Rust,但我很难弄清楚我应该为使用 A* 的 N-Puzzle 求解器使用什么结构。

在这个项目中,我使用一棵树来计算并选择解决 N-Puzzle 的最佳方法。一棵典型的树看起来像这样: 每个节点中的数字是计算出的 f 分数,它表示在到达最终状态之前我们希望进行的最小移动次数。 灰色节点是已经探索过的节点,它们在"close set"中。 绿色节点是解决方案的潜在步骤,它是 "open set".

在每次迭代中,我们都会探索 f 分数最低的绿色节点。为了优化开放集中此节点的搜索,我需要将所有绿色节点的可变引用存储在 vector/list/array..

同时拥有树和相同可变节点列表的最佳方法是什么?

请注意,稍后我想使用多线程。

在对项目的内部可变性、线程和其他一些东西进行了一些研究之后,我找到了一个更优雅的解决方案。

该算法的目标是计算子项直到找到目标,然后通过父项系统返回所有图表并跟踪您从头开始执行的所有动作。我找到了一种没有图形表示但只有 openlist 和 closelist 的方法。 在这种情况下不需要多个可变引用。如果在每个子项中,您将其父项的索引存储在关闭列表中,这不会改变,您可以回到开始没有可变性。

我问的答案没有解决我的问题,我重新研究了算法,一切都重新做了。不管怎样,谢谢你的回答,我学到了关于 Rust 的新东西。