При выполнении DFS любой узел находится в одном из трех состояний - до посещения, во время рекурсивного посещения его потомков и после посещения всех его потомков (возврат к своему родителю, т. Е. Фаза завершения). Три цвета соответствуют каждому из трех состояний. Одна из причин упоминания цветов и времени посещения и возвращения заключается в том, чтобы четко определить эти различия для лучшего понимания.
Конечно, есть фактическое использование этих цветов. Рассмотрим ориентированный граф . Предположим, вы хотите проверить на наличие циклов. В неориентированном графе, если рассматриваемый узел имеет черного или серого соседа, он указывает цикл (и DFS не посещает его, как вы упомянули). Однако в случае ориентированного графа черный сосед не означает цикл. Например, рассмотрим граф с вершинами 3 - и , с ориентированными ребрами , как , , . Предположим , что начинается DFS на , а затем посещена , то . Когда он вернулся вGGA,B,CA→BB→CA→CABCA он проверяет, что уже посещен и является черным. Но на графике нет цикла.C
На ориентированном графе цикл присутствует тогда и только тогда, когда узел снова виден до посещения всех его потомков. Другими словами, если у узла есть сосед, который является серым, то существует цикл (а не когда сосед является черным). Серый узел означает, что мы в настоящее время исследуем его потомков - и если один такой потомок имеет ребро к этому серому узлу, то существует цикл. Итак, для обнаружения цикла в ориентированных графах вам нужно иметь 3 цвета. Могут быть и другие примеры, но вы должны понять.