java - 如何实现广度优先搜索到一定深度?

标签 java algorithm search depth-first-search breadth-first-search

我理解并可以轻松实现 BFS。

我的问题是,我们怎样才能让这个 BFS 限制在一定的深度?假设,我只需要深入 10 级。

最佳答案

你可以用恒定的空间开销来做到这一点。

BFS 的属性是队列中所有未访问的节点的深度都不会减少,最多增加 1。因此当您从 BFS 队列中读取节点时,您可以在单个 depth 变量中跟踪当前深度, 初始为 0。

你需要做的就是记录队列中的哪个节点对应下一次深度增加。您可以简单地通过使用变量 timeToDepthIncrease 来记录插入此节点时已在队列中的元素数,并在您从队列中弹出节点时递减此计数器来完成此操作。

当它达到零时,您从队列中弹出的下一个节点将处于一个新的、更大(增加 1)的深度,因此:

  • 增量 depth
  • pendingDepthIncrease 设置为真

每当将子节点压入队列时,首先检查pendingDepthIncrease是否为真。如果是,则此节点的深度会更大,因此在推送之前将 timeToDepthIncrease 设置为队列中的节点数,并将 pendingDepthIncrease 重置为 false。

最后,当depth超过想要的深度时停止!稍后可能出现的每个未访问节点必须处于此深度或更深。

[编辑:感谢评论者 keyser。]

关于java - 如何实现广度优先搜索到一定深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10258305/

相关文章:

java - 静态方法与静态数据

java - 如何将 libgdx int keycode 转换为 char?

java - 使用 tcp/ip 监视器监视 eclipse 上的其余调用

algorithm - 如何计算边界矩形的宽度,以适应特定比例的文本包装?

javascript - mmenu 搜索触发网站(全局)搜索

PHP CSV VLookup

mysql - BOOLEAN 搜索 MySQL 不适用于某些单词

java - OpenGL ES 1.0 安卓 : Unable to load multiple textures

algorithm - 当应用程序未运行时,Dropbox 用于识别本地更改的文件/文件夹列表的算法是什么?

java - 生成与集合中给定的任何一个不同的随机索引