在CLRS中实现DFS和BFS实现灰色的目的是什么?

Aza*_*nov 3 algorithm breadth-first-search depth-first-search clrs graph-algorithm

在实现DFS和BFS时,CLRS作者为每个顶点区分3种颜色 - 灰色,黑色和白色.我知道黑色和白色表示节点是否被访问过.为什么我们需要灰色?

我的猜测是检测周期,但是我们还能检测出只有黑白的周期(即没有灰色)吗?

Tem*_*pux 6

主要原因是帮助读者更好地理解这个概念.但是有些算法实际上使用了灰色节点.例如,为了在有向图中找到周期,您需要灰色节点,因为具有黑色邻居不表示周期,并且只有灰色邻居创建周期.

A->B, B->C, A->C
Run Code Online (Sandbox Code Playgroud)

A->C尽管C是黑色的,但不会创造一个循环.