首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在第一个源节点出队后,如果队列已经为空,广度优先搜索如何工作?

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

Stack Overflow用户
提问于 2017-04-15 04:03:01
回答 2查看 168关注 0票数 0

根据Wikipedia的说法,当使用广度优先搜索时,您必须将节点出队,以便您可以访问所有子节点(或该特定节点的邻居)。这对我来说是完全有意义的:

代码语言:javascript
复制
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循环吗?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-04-15 04:14:07

不,它不会立即跳出while循环。

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

  1. 您检查条件
  2. 出队发生,
  3. 您检查我们是否在目标位置,
  4. 您添加所有子项,
  5. ,然后返回(1)再次检查条件。

所以它在步骤2-4中暂时为空并不重要,只要它返回到步骤1时不再为空即可。

票数 1
EN

Stack Overflow用户

发布于 2017-04-15 04:13:32

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43418472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档