Algorytm DFS (przeszukiwanie grafu w głąb) polega na przejściu całego grafu (tzn tam gdzie się da dostać z danego miejsca). Takie przejście jest podstawą do wielu bardziej skomplikowanych algorytmów. (np. funkcja low).
Algorytm DFS polega na najpierw przechodzeniu do nieodwiedzonych sąsiadów jak najdalej się da. Jak już jesteśmy w
wierzchołku, gdzie nie ma nieodwiedzonych sąsiadów, to cofamy się do poprzedniego wierzchołka i kontynuujemy. Czyli tak
bardziej schematycznie:
Jeśli mamy nieodwiedzonego sąsiada, to do niego idziemy
Jeśli nie mamy nieodwiedzonego sąsiada, to cofamy się do poprzedniego wierzchołka
Zasymulujmy algorytm DFS (zaczynając od wierzchołka 1) dla przykładowego grafu:
Z wierzchołka 1 przechodzimy do jednego z jego nieodwiedzonych sąsiadów, czyli wierzchołka 2.
Z wierzchołka 2 przechodzimy do jednego z jego nieodwiedzonych sąsiadów, czyli wierzchołka 4.
Wierzchołek 4 nie ma nieodwiedzonych sąsiadów, więc cofamy się do wierzchołka 2.
Wierzchołek 2 nie ma nieodwiedzonych sąsiadów, więc cofamy się do wierzchołka 1.
Z wierzchołka 1 przechodzimy do jednego z jego nieodwiedzonych sąsiadów, czyli wierzchołka 3.
Z wierzchołka 3 przechodzimy do jednego z jego nieodwiedzonych sąsiadów, czyli wierzchołka 5.
Z wierzchołka 5 przechodzimy do jednego z jego nieodwiedzonych sąsiadów, czyli wierzchołka 8.
Wierzchołek 8 nie ma nieodwiedzonych sąsiadów, więc cofamy się do wierzchołka 5.
Wierzchołek 5 nie ma nieodwiedzonych sąsiadów, więc cofamy się do wierzchołka 3.
Z wierzchołka 3 przechodzimy do jednego z jego nieodwiedzonych sąsiadów, czyli wierzchołka 6.
Wierzchołek 6 nie ma nieodwiedzonych sąsiadów, więc cofamy się do wierzchołka 3.
Z wierzchołka 3 przechodzimy do jednego z jego nieodwiedzonych sąsiadów, czyli wierzchołka 7.
Wierzchołek 7 nie ma nieodwiedzonych sąsiadów, więc cofamy się do wierzchołka 3.
Wierzchołek 3 nie ma nieodwiedzonych sąsiadów, więc cofamy się do wierzchołka 1.
Wierzchołek 1 nie ma nieodwiedzonych sąsiadów, więc kończymy nasz algorytm.
Preorder i postorder to technika często wykorzystywana w zadaniach. Polega ona na zapisywaniu w którym momencie weszliśmy do danego wierzchołka i w którym momencie z niego wyszliśmy. Umożliwia nam np. ocenienie czy wierzchołek a znajduje się w poddrzewie wierzchołka b.
Algorytm DFS dla grida polega na przejściu całego grida (tzn tam gdzie się da dostać z danego miejsca). Takie przejście może być podstawą do wielu bardziej skomplikowanych algorytmów.
Algorytm DFS dla grida polega dokładnie na tym samym co zwykły algorytm DFS, tylko że zamiast grafu mamy prostokątną planszę. Wierzchołkami będą komórki grida, a krawędziami ścianki pomiędzy komórkami. Jeśli chcemy, możemy też niektóre ścianki bądź komórki blokować, trzeba będzie tylko odpowiednio podifować w kodzie. Poniżej (w przykładzie i kodzie) przedstawiam wersję bez blokad.
Zasymulujmy algorytm DFS dla grida dla grida o wymiarach 3x2 (zaczynając w komórce 1 1):
1 | 2 | 3 | |
1 | |||
2 |