我正在使用 STL 队列在图上实现 BFS(广度优先搜索)。如果队列中不存在该节点,我需要将其推送到队列中。然而,STL队列确实不允许迭代其元素 http://www.sgi.com/tech/stl/queue.html#2因此我无法使用 STL 查找功能。
我可以为每个节点使用一个标志来标记它们,当它们被访问时,只有当标志为 false 时才推送它们,但是,我需要多次运行 BFS,每次之后我都必须重置所有标志,所以我结束了使用计数器而不是标志,但我仍然想知道是否有在队列中查找项目的标准方法。
我假设你正在 BFS 中实现“闭集”的概念?这样做的标准方法是简单地维护一个单独的std::set
or std::unordered_set
已经遇到的元素。这样,你就得到 O(lgn) 或 O(1) 查找,在迭代队列时,如果支持的话,将需要 O(n) time.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)