pre
oraz post
Dodajemy do każdego wierzchołka parametry pre
oraz post
, które będą przechowywać wartości zegara gdy odpowiednio pierwszy raz odwiedzamy wierzchołek i gdy go opuszczamy. Wykonuje się to przez zainicjowani zmiennej clock = 1
na początku DFSa oraz następujące wersje procedur:
previsit
(v):
- v.
pre = clock
clock++
postvisit
(v):
- v.
.post = clock
clock++
Rodzaje krawędzi
- Tree edges – krawędzie należące do zbioru drzew DFS
- Forward edges – krawędzie od wierzchołka do jego potomka w drzewie DFS, ale nie należące do drzewa DFS
- Back edges – krawędzie od wierzchołka do jego poprzednika w drzewie DFS, ale nie należące do drzewa DFS
- Cross edges – krawędzie od wierzchołka do innego wierzchołka nie będącego jego potomkiem lub poprzednikiem (czyli wierzchołka wcześniej odwiedzonego i opuszczonego), ale nie należące do drzewa DFS
Wykrywanie rodzajów krawędzi (u,v)∈E:
- Tree/Forward | u.pre<v.pre<v.post<u.post
- Back | v.pre<u.pre<u.post<v.post
- Cross | v.pre<v.post<u.pre<u.post
Przykład