📜  门| GATE CS 2008 |问题17

📅  最后修改于: 2021-06-28 18:48:19             🧑  作者: Mango

广度优先搜索算法已使用队列数据结构实现。访问下图的节点的一种可能顺序是
(A) MNOPQR
(B) NQMPOR
(C) QMNPRO
(D) QMNPOR答案: (C)
说明:广度优先搜索首先访问“宽度”,即,如果它正在访问一个节点,则在访问该节点之后,它将首先访问邻居节点(子节点),然后再移动到下一级邻居。

让我们看看如何。

最初:如果BFS从节点Q开始,它将首先访问Q并将Q放入队列。

因此,队列包含:Q。

而且,访问顺序仍然是:问。

现在,它使Q出队,并探索其邻居{M,N,P}。它检查尚未访问的Q邻居,然后访问它们,并将它们放入Queue(以便以后可以访问其邻居)。

现在,可以访问这些邻居并将它们按任何顺序放入Queue(取决于实现)。

假设它访问并将它们按顺序(MNP)放入队列,M在FRONT上,P在REAR上。

因此,访问顺序:QMNP。

现在,它将在队列中查找下一个条目。当队列遵循FIFO原则时,M出队。

队列包含:(NP)

它探索M,找到其邻居{N,Q,R},但是在访问它们之前,它会检查它们是否已被更早访问,它将仅访问并将那些尚未访问的节点放入队列。由于N和Q较早被访问过,因此只会访问R并将其排队。

来访顺序:QMNPR。
队列包含:(NPR)。

现在,N出队了。

队列包含:(PR)。

它探索N,找到其邻居{M,O,Q}。由于M和Q较早被访问过,因此只会访问O并使其入队。

访问订单:QMNPRO。
队列包含:(PRO)。

现在,P出队了。

队列包含:(RO)。

它探索P,找到其邻居{O,Q}。由于O和Q较早被访问过,因此不会排队。

现在,R出队了。

队列包含:(O)。

它探索R,找到其邻居{M}。由于M较早曾被访问过,因此不会排队。

现在,O出队了。

队列包含:()。

它探索O,找到其邻居{N,P}。由于两者都已被访问过,所以它不会进入队列。

现在,队列为空,因此BFS在此处停止。

且访问顺序为:QMNPRO。

可以在以下网址找到上述说明的伪代码:https://en.wikipedia.org/wiki/Breadth-first_search
这个问题的测验