为什么BFS算法使用队列?

时间:2016-09-27 18:05:39

标签: algorithm search tree breadth-first-search

我正在查看维基百科上的伪代码

Breadth-First-Search(Graph, root):
 2 
 3     for each node n in Graph:            
 4         n.distance = INFINITY        
 5         n.parent = NIL
 6 
 7     create empty queue Q      
 8 
 9     root.distance = 0
10     Q.enqueue(root)                      
11 
12     while Q is not empty:        
13     
14         current = Q.dequeue()
15     
16         for each node n that is adjacent to current:
17             if n.distance == INFINITY:
18                 n.distance = current.distance + 1
19                 n.parent = current
20                 Q.enqueue(n)

https://en.wikipedia.org/wiki/Breadth-first_search

我感到好奇的是,是否有一个特定的原因,为什么使用队列来保存节点。在我看来,可以使用任何容器,因为通过容器中当前元素的顺序是无关紧要的。

2 个答案:

答案 0 :(得分:0)

队列不仅仅是一个容器。这正是该算法的关键思想。

队列是 1.一个容器肯定。 2.它只能按特定顺序添加/弹出(队列和堆栈都具有此属性)

第二点是回答你问题的关键点。

如果您使用队列作为一般列表,通过列表索引直接添加和弹出元素,整个算法就不那么简单了。 (即队列不再是队列)

答案 1 :(得分:0)

  1. 因为您事先不知道边界的大小,所以使用队列可以提高内存效率。
  2. 队列数据结构本质上被认为是“公平”的。作为队列基础的FIFO概念将确保首先探索那些首先发现的东西。