在 DFS 中对一个顶点使用 3 个状态有什么好处?

What's the good of using 3 states for a vertex in DFS?

Algorithms in a Nutshell(第2版)中对深度优先搜索(DFS)的解释中,作者对一个顶点使用了3种状态,比如white(未访问过),gray(有未访问过的邻居),black(访问过)。

两个状态(whiteblack)足以遍历。为什么要添加 gray 状态?它有什么用?

你是对的。

您可以将其着色为黑色,而不是将顶点着色为灰色,并且该算法仍然有效。

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

我猜这里使用第三种颜色的目的是为了冗长 and/or 可视化目的。如果要在遍历图形时显示图形,第三种颜色可以更清楚地显示遍历过程的状态,即当前哪些节点 "being visited".

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

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

此外,当您使用使用 3 种颜色的 DFS 的 "timestamping" 着色(这是一个列表,说明当您按每个顶点出现的顺序为每个顶点着色时)- 您可以找到有关图,如后边。例如,这用于确定图是否是无环的。

请注意,仅出于发现图形的目的 - 3 种颜色确实不是强制性的,练习 22-3.4 确实要求你证明这一点。