Javascript 基于X范围查找网格中的有效节点

Javascript 基于X范围查找网格中的有效节点,javascript,coordinates,nodes,a-star,breadth-first-search,Javascript,Coordinates,Nodes,A Star,Breadth First Search,我在基于中心点和最大范围的网格中查找N个位置时遇到问题 我有这个网格,网格中的每个坐标可以是闭合的,也可以是开放的,我用一个开放的坐标,找到第一个坐标周围的所有开放坐标,它们都是有效的,并且它们之间的行走范围等于或小于最大行走范围 起初,我尝试了一个使用a*的解决方案,我会选择范围内的每个坐标,检查它们是否有效,如果有效,我会调用a*从它们到中心位置并计算步数,如果它们高于我的最大范围,我会从我的列表中删除坐标。当然,对于大于3的范围,或者具有多个坐标的栅格,这确实是很慢的。 然后我尝试递归地搜

我在基于中心点和最大范围的网格中查找N个位置时遇到问题

我有这个网格,网格中的每个坐标可以是闭合的,也可以是开放的,我用一个开放的坐标,找到第一个坐标周围的所有开放坐标,它们都是有效的,并且它们之间的行走范围等于或小于最大行走范围

起初,我尝试了一个使用a*的解决方案,我会选择范围内的每个坐标,检查它们是否有效,如果有效,我会调用a*从它们到中心位置并计算步数,如果它们高于我的最大范围,我会从我的列表中删除坐标。当然,对于大于3的范围,或者具有多个坐标的栅格,这确实是很慢的。 然后我尝试递归地搜索坐标,从中心坐标开始,展开并递归地检查坐标的有效性。这个解决方案被证明是最有效的,除了在我的代码中,每个函数调用都是重新检查已经检查过的坐标并返回重复的值。我以为我可以在函数调用之间共享“选中”列表,但这破坏了我的代码,因为调用正在检查坐标并关闭它,即使它仍然有子节点,但技术上不在其中心的范围内(但在第一个中心的范围内),它会关闭它们并给出一些奇怪的结果

最后,我的问题是,我该怎么做?我的方法错了吗?有更好的方法吗


谢谢。

我曾经实现过类似的功能。您提出的简单递归解决方案在小范围内运行良好,但对于较大的值,执行时间会失控

我通过实现Dijkstra算法的一个变体改进了这一点,正如您所说,该算法保留了访问节点的列表。但是,如果N是你的行走范围(维基百科上的gif可能会帮助你理解我的意思),那么不要像使用a*那样对reach中的每个坐标进行完整的路径搜索,而是进行算法的前N次迭代。您访问的节点列表将成为您要查找的可访问的磁贴


真管用!正确地实施它有点痛苦,但最终这是最好的解决方案。谢谢:)