在DFS中使用3个状态作为顶点的好处是什么?

时间:2016-08-13 16:41:47

标签: algorithm graph-algorithm depth-first-search

Nutshell中的算法(第2版)中深度优先搜索(DFS)的解释中,作者对顶点使用了3种状态,比如 white (没有访问过),灰色(有未访问过的邻居),黑色(已访问过)。

enter image description here

两个状态(白色黑色)足以进行遍历。为什么要添加灰色状态?它用于什么?

2 个答案:

答案 0 :(得分:2)

这是Introduction to Algorithms by Coerman at al中显示的DFS算法的变体。

当您使用3种颜色而不是2种颜色时,它会为您提供更多信息。 Fist,它允许您在算法运行期间的每个点,知道哪些顶点当前"打开" (灰色),这是"关闭" (黑色),尚未探索(白色)。

此外,当您使用" timestamping"使用3种颜色的颜色(这是按照它出现的顺序为每个顶点着色的列表) - 你可以找到关于图形的有趣属性,比如支持。例如,这用于确定图表是否是非循环的。

请注意,仅出于发现图表的目的 - 3种颜色确实不是强制性的,实际上练习22-3.4要求您显示。

答案 1 :(得分:1)

你是对的。

不是将顶点着色为灰色,而是将其着色为黑色,算法仍然有效。

很容易看出,因为代码中没有任何地方正在检查灰色和黑色。唯一的检查是顶点是否为白色(标记为2的线)。这意味着所有不是白色的颜色都是等效的。

我猜这里使用第三种颜色的目的是出于冗长和/或可视化的目的。如果您在遍历图形时显示图形,则第三种颜色可以更清楚地了解遍历过程的状态,即当前正在访问哪些节点"。