在图论中的深度优先搜索(DFS)算法中,通常使用“颜色”来标记结点的访问状态。传统上,可以使用三种颜色:
- 白色:表示结点未被访问。
- 灰色:表示结点正在被访问(即已访问但其邻接结点还未完全处理)。
- 黑色:表示结点已被完全访问(即其邻接结点已全部处理)。
然而,在实际算法实现过程中,尤其是在只关心结点是否被访问过时,可以简化为仅使用两个状态(即两位颜色:白色和黑色)。本文将证明,在DFS算法中,使用单个位来存放每个结点的颜色(即只用两种状态)已经足够,具体通过将DFS-VISIT算法中的第2行删除,DFS的结果仍然相同。
证明思路
DFS算法的核心在于递归访问每个结点,并通过颜色标记来避免重复访问和陷入无限循环。传统DFS-VISIT算法的伪代码如下: