根据维基百科,当使用广度优先搜索时,您必须使节点出列,以便您可以访问所有子节点(或该特定节点的邻居)。这对我来说很有意义:
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循环?
谢谢!
答案 0 :(得分:1)
不,它不会立即突破while循环。
循环中的所有内容都会在再次检查条件之前运行,所以:
因此,只要在步骤1中它不再为空,它在步骤2-4中暂时为空是无关紧要的。
答案 1 :(得分:0)
不,不。
您首先完成节点的处理(" for each node n that is adjacent to current:
" ...),在此期间您将节点的邻居推入队列,然后检查队列是否为空。