So implementieren Sie Tiefe erste Suche in C ++

So implementieren Sie Tiefe erste Suche in C ++
Tiefe erste Suche (DFS) ist ein leistungsstarker rekursiv. Es startet seine Suche mit einem bestimmten Scheitelpunkt und erkundet dann die Grafik so weit wie möglich an jedem Zweig vor dem Backtracking. Backtracking tritt immer dann auf DFS Der Algorithmus nähert sich einem Knoten, der keine Nachbarn hat, um sie zu besuchen. Wenn es sich einem Knoten ohne Nachbarn nähert.

In DFS, Die untersuchten Knoten werden in einer Stapeldatenstruktur gespeichert. Die Kanten, die uns zu unerforschten Knoten leiten, werden genannt ''Entdeckungskanten"Während die Kanten bereits besuchte Knoten geleitet werden" werden genannt "Blockkanten''. DFS ist in Szenarien nützlich, wenn ein Programmierer verbundene Komponenten oder Zyklen in einem Diagramm finden möchte.

Befolgen Sie die Richtlinien dieses Artikels, um sie zu implementieren DFS in c++.

Implementierung von DFs in C++

Im folgenden Abschnitt werden wir uns überlegen, wie DFS wird in c implementiert++. Man kann die angegebenen Schritte zur Implementierung befolgen DFS.

  1. Fügen Sie den Wurzelknoten eines Baumes oder Diagramms in den Stapel ein.
  2. Fügen Sie das Top -Element des Stacks zu Ihrer besuchten Liste hinzu.
  3. Entdecken Sie alle angrenzenden Knoten zum besuchten Knoten und fügen Sie die Knoten hinzu, die den Stapel noch nicht besucht haben.
  4. Wiederholen Sie die Schritte 2 und 3, bis der Stapel leer ist.

DFS Pseudocode

Der DFS Pseudocode ist unten gezeigt. Im drin() Funktion, wir führen unsere aus DFS Funktion auf jedem Knoten. Da die Grafik möglicherweise zwei getrennte Teile hat, können wir die ausführen DFS Algorithmus an jedem Knoten, um sicherzustellen, dass wir jeden Scheitelpunkt abgedeckt haben.

Dfs (g a)
A.besucht = true
für jedes b ∈ G.Adj [a]
Wenn b.besucht == false
Dfs (g, b)
drin()

Für jeden a ∈ G
A.besucht = falsch
Für jeden a ∈ G
Dfs (g, a)

Hier repräsentieren G, A und B das Diagramm, den ersten Knoten und Knoten im Stapel zuerst besucht.

Implementierung von DFs in C++

Ein C ++ - Programm für DFS Implementierung ist unten angegeben:

#enthalten
#enthalten
#enthalten
Verwenden von Namespace STD;
Vorlage
Klassentiefe

Privatgelände:
Karte > adjlst;
öffentlich:
TiefenstSearch ()
void add_edge (t a, t b, bool dir = true)

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

adjlst [b].push_back (a);


void prnt ()

für (auto i: adjlst)
Cout<";
für (t Eintrag: i.zweite)
Cout<
Cout<

void dfs_helper (T -Knoten, Karte &hat besucht)
besucht [Knoten] = true;
Cout << node <<" " << endl;
für (t Nachbar: adjlst [Knoten])
Wenn(!besucht [Nachbar])
DFS_Helper (Nachbar, besucht);



void DFs (T SRC)

Karte hat besucht;
dfs_helper (src, besucht);

;
int main ()
Tiefenforschung 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;

In diesem Code haben wir implementiert DFS Algorithmus folgt dem oben angegebenen Pseudo -Code. Wir haben 12 Knotenpaare. Wir haben eine Klasse definiert “G”, Was ein Diagramm mit Eckpunkte A und B darstellt, das besuchte und nicht besuchte Knoten darstellt.

Ausgang

Abschluss

DFS ist ein beliebter Suchalgorithmus, der für mehrere Szenarien nützlich ist, z. Wir haben auch die Arbeit des DFS Methode mit einem Beispiel. DFS beschäftigt Stapel, um die Technik auszuführen, und kann auch auf Bäumen verwendet werden.