Jak zaimplementować pierwsze wyszukiwanie głębokości w C ++

Jak zaimplementować pierwsze wyszukiwanie głębokości w C ++
Pierwsze wyszukiwanie głębokości (DFS) jest potężnym algorytmem rekurencyjnym używanym do wyszukiwania wszystkich węzłów wykresu lub drzewa w strukturze danych. Rozpoczyna wyszukiwanie od wyboru określonego wierzchołka, a następnie rozpoczyna się eksploracji wykresu jak najdalej wzdłuż każdej gałęzi przed wycofaniem. Cofanie się występuje, gdy tylko DFS Algorytm zbliża się do węzła, który nie ma sąsiad do odwiedzenia. Kiedy zbliży się do węzła bez sąsiadów, powróci do jego kroków do poprzedniego węzła.

W DFS, Badane węzły są przechowywane w strukturze danych stosu. Krawędzie, które kierują nas do niezbadanych węzłów, nazywane sąOdkrycie krawędzi„Podczas gdy krawędzi będą już wizytyjnie, które już odwiedzone są”, nazywane sąBlokuj krawędzie'. DFS jest przydatny w scenariuszach, gdy programista chce znaleźć połączone komponenty lub cykle na wykresie.

Postępuj zgodnie z wytycznymi tego artykułu do wdrożenia DFS w c++.

Wdrożenie DFS w C++

W poniższej sekcji omówimy, jak DFS jest zaimplementowany w C++. Można wykonać podane kroki do wdrożenia DFS.

  1. Włóż węzeł główny drzewa lub wykresu do stosu.
  2. Dodaj górny element stosu do swojej odwiedzonej listy.
  3. Odkryj wszystkie sąsiednie węzły z odwiedzonym węzłem i dodaj te węzły, które jeszcze nie odwiedziły stosu.
  4. Powtarzaj kroki 2 i 3, aż stos będzie pusty.

Dfs pseudocode

DFS Pseudokod pokazano poniżej. w w tym() Funkcja, wykonujemy nasze DFS Funkcja w każdym węźle. Ponieważ wykres może mieć dwie odłączone części, możemy uruchomić DFS algorytm w każdym węźle, aby upewnić się, że omówiliśmy każdy wierzchołek.

DFS (G A)
A.odwiedzone = prawda
Dla każdego b ∈ G.Przym [a]
Jeśli b.odwiedzone == Fałsz
DFS (G, B)
w tym()

Dla każdego ∈ G
A.odwiedzone = false
Dla każdego ∈ G
DFS (G, A)

Tutaj G, A i B reprezentują wykres, najpierw odwiedził węzeł i węzeł odpowiednio w stosie.

Wdrażanie DF w C++

Program C ++ dla DFS Wdrożenie podano poniżej:

#włączać
#włączać
#włączać
za pomocą przestrzeni nazw Std;
szablon
Klasa głębokierzysta

prywatny:
mapa > adjlist;
publiczny:
DepthFirstsearch ()
void add_edge (t a, t b, bool dir = true)

adjlist [a].push_back (b);
if (dir)

adjlist [b].push_back (a);


void prnt ()

dla (auto i: adjlist)
Cout<";
dla (t wpis: i.drugi)
Cout<
Cout<

void dfs_helper (węzeł t, mapa i odwiedzone)
odwiedzone [węzeł] = true;
Cout << node <<" " << endl;
dla (t sąsiad: adjlist [węzeł])
Jeśli(!odwiedzone [sąsiad])
dfs_helper (sąsiad, odwiedzony);



void dfs (t src)

mapa odwiedzone;
dfs_helper (SRC, odwiedzony);

;
int main ()
DepthFirstsearch G;
G.Add_edge (0,5);
G.Add_edge (0,7);
G.Add_edge (4,7);
G.Add_edge (7,8);
G.Add_edge (2,1);
G.Add_edge (0,6);
G.Add_edge (2,4);
G.Add_edge (3,2);
G.Add_edge (3,6);
G.Add_edge (7,5);
G.Add_edge (5,8);
G.Prnt ();
G.DFS (6);
Cout << endl;

W tym kodzie zaimplementowaliśmy DFS Algorytm po pseudo podanym powyżej. Mamy 12 par węzłów. Zdefiniowaliśmy klasę „G”, Który reprezentuje wykres zawierający wierzchołki A i B, które reprezentują odwiedzone i niezapomniane węzły.

Wyjście

Wniosek

DFS jest popularnym algorytmem wyszukiwania przydatnym dla kilku scenariuszy, takich jak znalezienie cykli na wykresie i uzyskanie informacji o połączonych komponentach lub wszystkich wierzchołkach na wykresie. Opisaliśmy również działanie DFS Metoda z przykładem. DFS wykorzystuje stosy do wykonania techniki i można je również stosować na drzewach.