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

Tree A*:在Rust中打开和关闭列表,tree,rust,a-star,Tree,Rust,A Star,我正在学习Rust,我很难弄清楚我应该使用哪种结构来使用* 在这个项目中,我使用一棵树来计算并选择解决N-难题的最佳方法。典型的树如下所示: 每个节点中的数字是计算出的f分数,它表示在到达最终状态之前我们希望进行的最小移动次数。 灰色节点已被探测到,它们位于“闭合集”中。 绿色节点是解决方案的潜在步骤,它是“开放集” 在每次迭代中,我们探索f分数最低的绿色节点。为了优化该节点在开放集中的搜索,我需要在向量/列表/数组中存储所有绿色节点的可变引用 同时拥有树和相同可变节点列表的最佳方式是什么? 请

我正在学习Rust,我很难弄清楚我应该使用哪种结构来使用*

在这个项目中,我使用一棵树来计算并选择解决N-难题的最佳方法。典型的树如下所示: 每个节点中的数字是计算出的f分数,它表示在到达最终状态之前我们希望进行的最小移动次数。 灰色节点已被探测到,它们位于“闭合集”中。 绿色节点是解决方案的潜在步骤,它是“开放集”

在每次迭代中,我们探索f分数最低的绿色节点。为了优化该节点在开放集中的搜索,我需要在向量/列表/数组中存储所有绿色节点的可变引用

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


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

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

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


我问的答案不是解决我的问题,我再次研究了算法,然后又做了所有的事情。不管怎样,谢谢你的回答,我学到了关于生锈的新知识。

使用内部可变性(
Cell
)或某种间接方法,如索引。通常可以消除对可变性引用的需要。你能详细说明一下为什么搜索需要可变引用吗?