Ao fazer um DFS, qualquer nó está em um dos três estados - antes de ser visitado, durante a visita recursiva de seus descendentes e depois de todos os seus descendentes terem sido visitados (retornando ao pai, ou seja, fase de finalização). As três cores correspondem a cada um dos três estados. Uma das razões para mencionar cores e horário de visita e retorno é fazer explicitamente essas distinções para melhor compreensão.
Obviamente, existem usos reais dessas cores. Considere um grafo orientado . Suponha que você queira verificar G para a existência de ciclos. Em um gráfico não direcionado, se o nó em consideração tiver um vizinho preto ou cinza, isso indica um ciclo (e o DFS não o visita como você mencionou). No entanto, no caso de um gráfico direcionado , um vizinho preto não significa um ciclo. Por exemplo, considere um gráfico com vértices 3 - A , B , e C , com bordos dirigidos como um → B , B → C , Um → C . Suponha que o DFS inicie em AGGA , B ,CA → BB → CA → CUMA, Em seguida, visitas , então C . Quando retorna a A , verifica se C já foi visitado e está preto. Mas não há ciclo no gráfico.BCUMAC
Em um gráfico direcionado, um ciclo está presente se e somente se um nó for visto novamente antes de todos os seus descendentes terem sido visitados. Em outras palavras, se um nó tiver um vizinho cinza, haverá um ciclo (e não quando o vizinho estiver preto). Um nó cinza significa que atualmente estamos explorando seus descendentes - e se um desses descendentes tiver uma borda para esse nó cinza, haverá um ciclo. Portanto, para detecção de ciclo em gráficos direcionados, você precisa ter 3 cores. Também pode haver outros exemplos, mas você deve entender.