DFS 순회에서 모든 자식이 완료되면 노드가 완료됩니다. 순회 중 각 노드의 발견 및 완료 시간을 표시하면 시작 및 종료 시간을 비교하여 노드가 하위 항목인지 확인할 수 있습니다. 실제로 모든 DFS 통과는 다음 규칙에 따라 가장자리를 분할합니다.
d [node]를 노드의 발견 시간으로, f [node]를 종료 시간으로 설정하십시오.
괄호 정리 모든 u, v에 대해 정확히 다음 중 하나를 보유합니다.
1. d [u] <f [u] <d [v] <f [v] 또는 d [v] <f [v] <d [u ] <f [u] 및 u 및 v 중 어느 것도 다른 쪽의 후손이 아닙니다.
d [u] <d [v] <f [v] <f [u]이고 v는 u의 자손입니다.
d [v] <d [u] <f [u] <f [v]이고 u는 v의 자손입니다.
따라서 d [u] <d [v] <f [u] <f [v]는 발생할 수 없습니다.
괄호와 같이 : () [], ([]) 및 [()]는 정상이지만 ([)] 및 [(])는 올바르지 않습니다.
예를 들어 모서리가있는 그래프를 고려하십시오 .A-
> B
A-> C
B-> C
방문 순서를 노드 레이블 문자열로 표시하십시오. 여기서 "ABCCBA"는 ((()))와 유사한 A-> B-> C (완료) B (완료) A (완료)를 의미합니다.
따라서 "ACCBBA"는 "(() ())"의 모델이 될 수 있습니다.
예 :
"CCABBA": CC가 A의 내부에 있지 않기 때문에 A-> C는 교차 모서리입니다.
"ABCCBA": 그런 다음 A-> C는 전방 모서리 (간접 하위)입니다.
"ACCBBA": 그런 다음 A-> C는 나무 가장자리 (직접 자손)입니다.
출처 :
CLRS :
https://mitpress.mit.edu/books/introduction-algorithms
Lecure Notes http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/depthSearch.htm