我使用的是STL队列实现上图的BFS(广度优先搜索)。 我需要推动一个节点在队列中,如果该节点已在队列中不存在。 然而,STL队列也不允许通过迭代它的元素 ,因此我不能使用STL查找功能。
我可以用一个标志,对每个节点,以纪念他们被访问时,他们并把他们只有在标志是假的,不过,我需要运行BFS多次,每一次后,我将不得不重新设置所有的标志,所以我结束使用了一个计数器而不是标志,但我还是想知道如果在队列找到一个项目的标准方式。
我使用的是STL队列实现上图的BFS(广度优先搜索)。 我需要推动一个节点在队列中,如果该节点已在队列中不存在。 然而,STL队列也不允许通过迭代它的元素 ,因此我不能使用STL查找功能。
我可以用一个标志,对每个节点,以纪念他们被访问时,他们并把他们只有在标志是假的,不过,我需要运行BFS多次,每一次后,我将不得不重新设置所有的标志,所以我结束使用了一个计数器而不是标志,但我还是想知道如果在队列找到一个项目的标准方式。
我假设你实现你的BFS“封闭集合”的概念? 这样做的标准方法是简单地维护单独std::set
或std::unordered_set
已经遇到过的元素。 这样,你得到O(LG N)或O(1)查找,同时通过队列进行迭代,如果得到支持,将需要O(n)的时间。