Comment implémenter la profondeur de la première recherche dans C ++

Comment implémenter la profondeur de la première recherche dans C ++
First de recherche en profondeur (DFS) est un puissant algorithme récursif utilisé pour rechercher tous les nœuds d'un graphique ou d'arbre dans la structure des données. Il commence sa recherche en sélectionnant un sommet spécifique, puis commence à explorer le graphique le plus possible le long de chaque branche avant de revenir en arrière. Backtracking se produit chaque fois que le DFS L'algorithme s'approche d'un nœud qui n'a pas de voisins à visiter. Lorsqu'il aborde un nœud sans voisins, il reviendra ses étapes vers le nœud précédent.

Dans DFS, Les nœuds explorés sont stockés dans une structure de données de pile. Les bords qui nous dirigent vers des nœuds inexplorés sont appelés 'Bords de découverte`` Alors que les bords qui vont diriger les nœuds déjà visités sont appelés ''bords de blocage'. DFS est utile dans les scénarios lorsqu'un programmeur veut trouver des composants ou des cycles connectés dans un graphique.

Suivez les directives de cet article pour mettre en œuvre DFS en c++.

Mise en œuvre de DFS en C++

Dans la section suivante, nous allons expliquer comment DFS est implémenté en c++. On peut suivre les étapes données pour mettre en œuvre DFS.

  1. Insérez le nœud racine d'un arbre ou du graphique dans la pile.
  2. Ajoutez le premier élément de la pile à votre liste visitée.
  3. Découvrez tous les nœuds adjacents au nœud visité et ajoutez les nœuds qui n'ont pas encore visité la pile.
  4. Répétez les étapes 2 et 3 jusqu'à ce que la pile soit vide.

Pseudocode DFS

Le DFS Le pseudocode est illustré ci-dessous. Dans le init () fonction, nous exécutons notre DFS fonction sur chaque nœud. Parce que le graphique peut avoir deux pièces déconnectées, nous pouvons exécuter le DFS algorithme sur chaque nœud pour nous assurer que nous avons couvert chaque sommet.

DFS (G A)
un.Visité = vrai
pour chaque b ∈ G.Adj [a]
Si b.visité == false
DFS (G, B)
init ()

Pour chaque a ∈ G
un.visité = faux
Pour chaque a ∈ G
DFS (G, A)

Ici G, A et B représentent le graphique, le nœud et le nœud visités pour la première fois dans la pile respectivement.

Implémentation de DFS en C++

Un programme C ++ pour DFS L'implémentation est donnée ci-dessous:

#inclure
#inclure
#inclure
Utilisation de Namespace Std;
modèle
classe DefthFirstSearch

privé:
carte > adjlist;
public:
DepthFirstSearch ()
void add_edge (t a, t b, bool dir = true)

Adjlist [A].push_back (b);
si (dir)

Adjlist [B].push_back (a);


void prnt ()

pour (auto i: adjlist)
couter<"
pour (entrée t: je.deuxième)
couter<
couter<

void dfs_helper (nœud t, carte &a visité)
Visité [nœud] = true;
couter << node <<" " << endl;
pour (t voisin: adjlist [nœud])
si(!visité [voisin])
dfs_helper (voisin, visité);



void DFS (t src)

carte a visité;
DFS_HELPER (SRC, visité);

;
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);
couter << endl;

Dans ce code, nous avons implémenté DFS algorithme suivant le pseudo code donné ci-dessus. Nous avons 12 paires de nœuds. Nous avons défini une classe "g”Qui représente un graphique ayant des sommets A et B qui représentent les nœuds visités et non visités.

Sortir

Conclusion

DFS est un algorithme de recherche populaire utile pour plusieurs scénarios, tels que trouver les cycles dans un graphique, et obtenir des informations sur les composants connectés ou tous les sommets dans un graphique. Nous avons également décrit le fonctionnement du DFS Méthode avec un exemple. DFS Emploie des piles pour exécuter la technique et peut également être utilisée sur les arbres.