Graph 为什么在广度优先搜索中,除了黑色和白色之外,我们还需要将节点着色为灰色?

Graph 为什么在广度优先搜索中,除了黑色和白色之外,我们还需要将节点着色为灰色?,graph,graph-algorithm,breadth-first-search,Graph,Graph Algorithm,Breadth First Search,如CLRS一书中所述,在执行BFS时,如果节点以前是白色的,现在将插入队列,则将其涂成灰色。但我们从不检查节点是否为灰色。那么为什么我们要把节点涂成灰色呢?我在科曼自己的《库拉》上找到了答案: 我在科曼本人的《库拉》上找到了答案: 第594页底部的脚注解释说:“我们区分灰色和黑色顶点,以帮助我们理解广度优先搜索是如何运作的。事实上,正如练习22.2-3所示,即使我们不区分灰色和黑色顶点,我们也会得到相同的结果。” 所以BFS真的可以只用黑白两种颜色。灰色被用作一种工具,帮助我们直观地了解算法是如

如CLRS一书中所述,在执行BFS时,如果节点以前是白色的,现在将插入队列,则将其涂成灰色。但我们从不检查节点是否为灰色。那么为什么我们要把节点涂成灰色呢?

我在科曼自己的《库拉》上找到了答案:

我在科曼本人的《库拉》上找到了答案:

第594页底部的脚注解释说:“我们区分灰色和黑色顶点,以帮助我们理解广度优先搜索是如何运作的。事实上,正如练习22.2-3所示,即使我们不区分灰色和黑色顶点,我们也会得到相同的结果。”


所以BFS真的可以只用黑白两种颜色。灰色被用作一种工具,帮助我们直观地了解算法是如何运行的。

第594页底部的脚注解释了这一点“我们区分灰色和黑色顶点,以帮助我们了解广度优先搜索的运作方式。事实上,如练习22.2-3所示,即使我们不区分灰色和黑色顶点,我们也会得到相同的结果。”


因此,BFS真的可以用白色和黑色来完成。灰色被用作一种工具来帮助我们可视化算法是如何运行的。

首先,让我们看看BFS是如何通过图形的

从一个给定的源开始。我们发现它的所有相邻节点,然后对通过这种方式发现的每个节点重复

一旦发现每个节点,我们就完成了,并且没有更多的节点等待处理(在队列中)。 所以我们真正关注的是:“这个节点已经到达(通过较短的路径)了吗?”

考虑到这一点,我们可以将颜色缩小为表示一个二进制状态(已发现/未发现)的布尔值,并依靠队列来保存尚未完全处理的任何节点


简而言之,如果它是黑色的,但仍在队列中,则将其处理为灰色。(需要在内部for循环之前查看前面,然后在后面退出队列)

首先,让我们看看BFS是如何通过图形的

从一个给定的源开始。我们发现它的所有相邻节点,然后对通过这种方式发现的每个节点重复

一旦发现每个节点,我们就完成了,并且没有更多的节点等待处理(在队列中)。 所以我们真正关注的是:“这个节点已经到达(通过较短的路径)了吗?”

考虑到这一点,我们可以将颜色缩小为表示一个二进制状态(已发现/未发现)的布尔值,并依靠队列来保存尚未完全处理的任何节点


简言之,如果它是黑色的,但仍在队列中,则按灰色处理。(需要在内部for循环之前查看前面,然后在后面退出队列)

第602页的书中有一个练习22.2-3,要求证明我们可以安全地删除算法的第5行和第14行(仅使用灰色的行)。但我仍然不知道在没有灰色分配的情况下它将如何工作。在您发布的Quora页面上有一条来自Vinh Nguyen的评论:“每当一个节点被推到队列中时,它都被标记为灰色,以防止同一节点被多个邻居多次推到队列中。“那么,为什么它在没有灰色的情况下可以工作呢?在602页的书中有一个练习22.2-3,它要求证明我们可以安全地删除算法的第5行和第14行(仅使用灰色的行)。但我仍然不知道在没有灰色作业的情况下它会如何工作。在你发布的Quora页面上有一条来自Vinh Nguyen的评论:“每当一个节点被推到队列中时,它都被标记为灰色,以防止同一个节点被多个邻居多次推到队列中。”因此,为什么它在没有灰色的情况下可以工作?在602页的书中有一个练习22.2-3,它要求证明我们可以安全地删除算法的第5行和第14行(仅使用灰色的行)。但我仍然不知道在没有灰色作业的情况下它会如何工作。在你发布的Quora页面上有一条来自Vinh Nguyen的评论:“每当一个节点被推到队列中时,它都被标记为灰色,以防止同一个节点被多个邻居多次推到队列中。”那么,为什么没有灰色它就可以工作呢?请准确解释,至少使用一些标记。我不知道如何解释你的评论,法蒂玛。你能澄清一下吗?我相信我已经足够准确地解释了这个问题。我想我可以在我的答案中添加标签,但不确定这与我的解释的准确性有什么关系。请准确解释,至少使用一些标签。我不确定如何解释你的评论,法特玛。你能澄清一下吗?我相信我已经足够准确地解释了这个问题。我想我可以在我的答案中添加标签,但不确定这与我的解释的准确性有什么关系。请准确解释,至少使用一些标签。我不确定如何解释你的评论,法特玛。你能澄清一下吗?我相信我已经足够准确地解释了这个问题。我想我可以在我的答案中添加标签,但不确定这与我的解释的精确性有什么关系。