# Zajęcia 17.02.2021 - DFS ###### tags: `Informatyka 1PR` | Nr | Imię i nazwisko | Ocena | | --- | --------------------- | ----- | | 1 | Wojciech Romanowski | | | 2 | Alicja Rosińska | | | 3 | Jakub Zaszkodny | | | 4 | Wojciech Reda | | | 5 | Zuzanna Trzebiatowska | | | 6 | Jan Sas | | | 7 | Maciej Solecki | | | 8 | Wojtek Rybak | | | 9 | Konrad Sobczak | | | 10 | Mikołaj Sczogiel | | | 11 | Kamil Żmudziński | | | 12 | Radek Pałys | | $\texttt{DFS}$ (Depth First Search) jest kolejnym algorytmem przeszukiwania grafu. W algorytmie $\texttt{BFS}$ priorytetyzowaliśmy przetwarzanie wierzchołków, które zostały odwiedzone najwcześniej. $\texttt{DFS}$ w pewnym sensie robi dokładnie odwrotnie - priorytetyzuje przetworzenie wierzchołka, który został odwiedzony najpóźniej. Możliwą implementacją $\texttt{DFS'a}$ jest literalna podmiana kolejki na stos w implementacji $\texttt{BFS'a}$. Jednakże, dużo wygodniejszym i przyjętym sposobem jest użycie rekurencji. Oto najprostsza wersja algorytmu napisana w $\texttt{C++}$: ```cpp const int N = 1000003; vector<int> G[N]; bool vis[N]; // v jest numerem aktualnie przetwarzanego wierzchołka void DFS(int v) { vis[v] = true; for (int i = 0; i < G[v].size(); i++) { int u = G[v][i]; if (!vis[u]) { // ekwiwalent if (vis[u] == false) DFS(u); } } } ```