我正在尝试在Javascript中实现广度优先搜索(也是其他算法,但目前是bfs)。
最终我想在网格上应用所有搜索算法,以找到从开始到目标节点的路径(我知道bfs对此并不是特别擅长)。我已经实现了,但问题是我没有事先提供整个树。我想要的是给它一个startnode和endnode,并在此基础上找到它们之间的路径。
我遇到的问题是,当我确定相邻的网格方块时,它会返回所有邻居,所以即使是已遍历的邻居也是如此。将其转换为图搜索而不是树搜索。解决它的一种方法是记住所有路径,以便我可以检查哪些邻居已经被遍历,因此不需要进一步检查。但是,正如我在搜索算法课程中学到的,bfs具有当前深度级别上所有节点的内存使用量。如果我存储所有路径,那么它会消耗比这更多的内存?
是否有可能只保留bfs正在搜索的当前深度的节点,当我事先没有树结构但仍然避免循环时?
我希望我已经清楚了。
提前致谢, 斯蒂芬
答案 0 :(得分:1)
如果您“忘记”您访问的节点,您可能会遇到DFS遇到的相同问题 - 它不是最佳的(可能找不到最佳路径)也不完整(由于无限循环,它可能会即使存在一个解决方案,也找不到解决方案。)
请注意:
如果您正在寻找更加完整且最优的内存效率更高的算法 - Iterative Deepening DFS可能就是您所追求的目标。