在DFS和BFS的实现中,CLRS作者为每个顶点区分3种颜色 - 灰色,黑色和白色。我知道黑色和白色表示节点是否被访问过。为什么我们需要灰色?
我的猜测是检测周期,但我们还能检测出只有黑色和周期的周期。白色(即没有灰色)?
答案 0 :(得分:5)
主要原因是帮助读者更好地理解这个概念。但是有一些算法实际上使用了灰色节点。例如,为了在有向图中查找周期,您需要灰色节点,因为黑色邻居不指示周期且仅灰色邻居创造周期。
A->B, B->C, A->C
尽管A->C
为黑色, C
仍然无法创建周期。