【发布时间】:2012-05-11 12:02:45
【问题描述】:
我正在使用 STL 队列在图上实现 BFS(广度优先搜索)。如果队列中已经不存在该节点,我需要在队列中推送该节点。但是,STL 队列执行not allow iteration through its elements,因此我无法使用 STL 查找功能。
我可以在每个节点被访问时使用一个标志来标记它们,并仅在标志为假时推送它们,但是,我需要多次运行 BFS,并且每次之后我都必须重置所有标志,所以我最终使用了计数器而不是标志,但我仍然想知道是否有在队列中查找项目的标准方法。
【问题讨论】:
-
您想要的是一个单独的数据存储来存储图表中节点的颜色。如果每个节点都有一个唯一的标识符可以用作键,那么您可以使用
std::map来存储节点的颜色(白色、灰色、黑色)。这将是O(log(n),因为std::map在大多数实现中被实现为RB 树。 -
@Vikas:我相信这相当于为每个节点分配一个计数器。
-
BFS 中的每个节点都会经历三种状态,未访问、已访问但未完成、已完成。我真的不知道您为每个节点分配计数器是什么意思。但是如果你能做到保持一个节点的三态,你就可以使用它。
标签: c++ algorithm stl find queue