我有一个带有障碍物的n x n网格块。我需要通过随机点开始在此网格中找到一个标志。你可以左转,右转或移动 向前向后。
在网格中的每个点,您都可以获得有关您的四个区块(上,下,左,右)的信息。 BFS似乎是一个很好的解决方案。但它让我想知道是否有更快或更好的探索算法?
非常感谢任何想法。
答案 0 :(得分:0)
BFS确实是您需要的算法。作为额外的好处,您将找到以细胞交叉到旗帜的最短路径。另请注意,您无需以任何“常规方式”存储整个图形,在这种情况下,网格足够表示图形本身。我的很多学生都不明白。
答案 1 :(得分:0)
这似乎是网格上的正常探索问题。如果您使用BFS,那么您会找到距离< = start和flag之间距离的所有点。
但是,我建议使用一些优化。
如果您知道旗帜的坐标(从您的问题中不清楚),您可以使用A *。
如果您没有标记坐标,则可以尝试利用块中的信息。在方形网格上,BFS创建圆形搜索前端,这意味着您可以获得有关开始周围的圆形区域内的点的所有信息。这意味着您将评估该区域中的所有点。您可以尝试通过优先评估点来优化您的探索,这些点可以为您提供有关图表的更多信息=具有许多未知邻居的点。
这将重定向您的搜索,以尽快评估新积分。找到标志后,您就可以看到距离的上限,您可以探索图表中可能会改善边界的未知部分。您还可以考虑优先级函数中从开头的距离,以避免搜索过多。优先功能的平衡取决于你的网格和障碍物的数量。