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.
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)
Kartehat besucht;
dfs_helper (src, besucht);
;
int main ()
TiefenforschungG;
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.