在 Nutshell中的算法(第2版)中深度优先搜索(DFS)的解释中,作者对顶点使用了3种状态,比如 white (没有访问过),灰色(有未访问过的邻居),黑色(已访问过)。
两个状态(白色和黑色)足以进行遍历。为什么要添加灰色状态?它用于什么?
答案 0 :(得分:2)
这是Introduction to Algorithms by Coerman at al中显示的DFS算法的变体。
当您使用3种颜色而不是2种颜色时,它会为您提供更多信息。 Fist,它允许您在算法运行期间的每个点,知道哪些顶点当前"打开" (灰色),这是"关闭" (黑色),尚未探索(白色)。
此外,当您使用" timestamping"使用3种颜色的颜色(这是按照它出现的顺序为每个顶点着色的列表) - 你可以找到关于图形的有趣属性,比如支持。例如,这用于确定图表是否是非循环的。
请注意,仅出于发现图表的目的 - 3种颜色确实不是强制性的,实际上练习22-3.4要求您显示。
答案 1 :(得分:1)
你是对的。
不是将顶点着色为灰色,而是将其着色为黑色,算法仍然有效。
很容易看出,因为代码中没有任何地方正在检查灰色和黑色。唯一的检查是顶点是否为白色(标记为2的线)。这意味着所有不是白色的颜色都是等效的。
我猜这里使用第三种颜色的目的是出于冗长和/或可视化的目的。如果您在遍历图形时显示图形,则第三种颜色可以更清楚地了解遍历过程的状态,即当前正在访问哪些节点"。