답변:
DFS를 수행 할 때 모든 노드는 방문하기 전, 재귀 적으로 후손을 방문하는 동안 및 모든 후손을 방문한 후 (즉, 랩업 단계) 상위 3 개 상태 중 하나에 있습니다. 세 가지 색상은 세 가지 상태 각각에 해당합니다. 색깔과 방문 시간 및 귀가 시간을 언급하는 이유 중 하나는 더 나은 이해를 위해 이러한 구별을 명시 적으로 작성하는 것입니다.
물론 이러한 색상의 실제 사용이 있습니다. 유 방향 그래프 고려하십시오 . 사이클 이 있는지 G 를 확인한다고 가정하십시오 . 무 방향 그래프에서 고려중인 노드에 검은 색 또는 회색 인접 노드가 있으면주기를 나타냅니다 (그리고 언급 한대로 DFS가 해당 노드를 방문하지 않습니다). 그러나 유향 그래프의 경우 검은 색 이웃은주기를 의미하지 않습니다. - 예를 들어, 세 꼭지점 그래프 고려 , B , 및 C 와 같은 방향 가장자리 → B , B → C , → C를 . DFS가 A 에서 시작한다고 가정하십시오 .그런 다음 를 방문한 다음 C 를 방문하십시오 . 이 반환되면 , 그 다음에 확인하는 것이 C는 이미 방문하고 검은 색으로되어 있습니다. 그러나 그래프에는 사이클이 없습니다.
유 방향 그래프에서 모든 하위 항목을 방문하기 전에 노드가 다시 표시되는 경우에만주기가 존재합니다. 즉, 노드에 회색 인 이웃이 있으면주기가 있습니다 (이웃이 검은 색이 아닌 경우). 회색 노드는 현재 하위 항목을 탐색하고 있음을 의미합니다. 이러한 하위 항목 중 하나가이 회색 노드에 모서리가 있으면주기가있는 것입니다. 따라서 유 방향 그래프에서 사이클을 탐지하려면 3 가지 색상이 필요합니다. 다른 예도있을 수 있지만 아이디어를 얻어야합니다.
회색 꼭짓점은 해당 노드를 방문하여 순서대로 이웃 노드 중 하나로 이동했지만 해당 노드에 더 많은 이웃 꼭짓점이있을 수 있음을 나타냅니다. 방문하지 않은 정점을 탐색하기 위해 역 추적하는 동안 유용합니다.
정점 A에 두 개의 이웃 B와 C가 있고 B에 하나의 이웃 D가 있다고 가정 해 봅시다 .
흰색의 정점 A에서 시작하여 회색 으로 만들고 이웃으로 이동합니다.
알파벳 순서를 선택하여 흰색의 버텍스 B 를 방문 하고 회색으로 표시합니다.
그런 다음 흰색-> 회색 D- > 더 이상 이웃의 D를 방문하십시오 . 따라서 D-> black으로 표시 됩니다.
이제 회색으로 B로 되돌아 가고 더 이상 nieghbors가 없습니다. 따라서 B-> black으로 표시 됩니다.
AGain 역 추적 A를 회색으로 표시하고 c-c를 방문하여 c-> 회색으로 더 이상 이웃을 표시하지 않음
마지막으로 A로 돌아가서 정점 A 가 더 이상 흰색 정점이없고 모두 검정으로 표시됩니다.
DFS에서는 에지를 포워드 에지, 백 에지, 크로스 에지 및 트리 에지로 분류합니다.
가장자리를 분류하기 위해 3 가지 색상을 사용합니다. 이 색상은 정점의 상태를 나타냅니다. v. 흰색 : 정점 v가 아직 발견되지 않았습니다.
회색 : v는 이미 발견되었지만 v에서 도달 할 수있는 모든 정점은 아직 발견되지 않았습니다. 따라서 정점 v는 여전히 스택에 있습니다.
검은 색 : v는 이미 스택에서 튀어 나와 있습니다.
가장자리 e를 통과하는 회색 정점을 만나면 DFS를 수행 할 때 뒷면 가장자리입니다. 가장자리 e를 통해 검은 정점을 만나면 교차 가장자리 / 앞으로 가장자리입니다. 흰색 정점이 발생하면 DFS를 재귀 적으로 호출합니다.