如果队列在第一个源节点出列后已经为空,那么广度优先搜索如何工作?

时间:2017-04-14 20:03:01

标签: algorithm search data-structures queue breadth-first-search

根据维基百科,当使用广度优先搜索时,您必须使节点出列,以便您可以访问所有子节点(或该特定节点的邻居)。这对我来说很有意义:

Breadth-First-Search(Graph, root):

create empty set S
create empty queue Q      

add root to S
Q.enqueue(root)                      

while Q is not empty:
    current = Q.dequeue()
    if current is the goal:
        return current
    for each node n that is adjacent to current:
        if n is not in S:
            add n to S
            n.parent = current
            Q.enqueue(n)

但是,我遇到的问题是,如果您刚开始使用第一个父节点,并且您已经出列以读取子节点,那么是否已经破坏了while循环?

谢谢!

2 个答案:

答案 0 :(得分:1)

不,它不会立即突破while循环。

循环中的所有内容都会在再次检查条件之前运行,所以:

  1. 你检查条件
  2. 出人意料,
  3. 你检查我们是否在目标,
  4. 你添加了所有孩子,
  5. 然后返回(1)再次检查状况。
  6. 因此,只要在步骤1中它不再为空,它在步骤2-4中暂时为空是无关紧要的。

答案 1 :(得分:0)

不,不。 您首先完成节点的处理(" for each node n that is adjacent to current:" ...),在此期间您将节点的邻居推入队列,然后检查队列是否为空。