La recherche en largeur d'abord est le phénomène de traversant chaque nœud du graphique ou d'un arbre, donc chaque nœud est traversé par deux parties. L'un est la partie «visitée», et l'autre est la partie «non visitée». Cela signifie que cette recherche vise à atteindre chaque nœud du graphique.
Pseudocode BFS et algorithme
Applications de BFS
Exemple 1
Nous présentons d'abord le graphique; Nous voulons avoir les valeurs qui doivent être traversées. Chaque nœud contient en outre les valeurs. Par exemple, ici, le premier numéro 5 se connectera avec les deux nœuds 3 et 7. De même, tous les autres nombres sont connectés à d'autres nœuds pour former un graphique. Après avoir défini le graphique, nous contiendrons deux types de données entiers de tableau pour stocker les valeurs numériques du graphique à visiter. Tandis que l'autre comprend les nœuds qui sont à côté de ceux qui sont visités.
Visité = []Les deux tableaux sont vides au moment du démarrage de l'étendue première recherche. Mais progressivement, ces tableaux contiennent les valeurs des nœuds comme nous l'avons décrit dans le graphique.
Après avoir introduit deux tableaux, nous définirons une fonction pour accéder et rechercher tous les nœuds en termes de ligne. Cette fonction prend les valeurs du tableau visité, le graphique et le troisième est le nœud. À l'intérieur de la fonction, nous ajouterons des valeurs dans les deux tableaux, comme décrit dans l'algorithme; Premièrement, les valeurs sont entrées dans la «file d'attente»; Lors de sa visite, ce nœud particulier est ensuite transféré dans la file d'attente visitée. Ainsi, pour l'instant, cette fonction ajoutera les valeurs des tableaux en utilisant une fonction d'ajout pour chaque tableau. Cette fonction contient les nœuds en tant que paramètre.
A visité.ajouter (nœud)Après cela, nous allons maintenant accéder et visiter les nœuds à travers une approche. Cette façon d'accéder aux nœuds est similaire à l'accès aux tableaux car nous appliquons toujours une boucle pour visiter chaque index itérativement. Dans le cas de BFS, nous utiliserons une boucle de temps, et à l'intérieur de cette boucle, une boucle pour une boucle est ajoutée pour satisfaire la condition utilisée par la boucle while.
Cette boucle tandis que la file d'attente ciblera directement car les nœuds seront d'abord ajoutés à la file d'attente, puis au tableau visité. Ainsi, les valeurs seront extraites via la fonction POP () et seront stockées dans les variables respectives.
M = file d'attente. Pop (0)Cette valeur sera affichée sur l'appel de la fonction d'impression. Maintenant, lorsque les valeurs de la file d'attente sont extraites, cette valeur sera utilisée pour localiser ses voisins qui doivent être saisis dans la file d'attente. Nous utiliserons donc pour Loop ici pour allouer chaque voisin jusqu'à la fin du graphique. La condition appliquée ici est que si la valeur n'est pas dans le tableau visité, cela signifie qu'il n'a pas été accessible plus tôt, alors le tableau visité sera ajouté par ces nouvelles valeurs (voisine) via la fonction d'ajout. Et de même, la file d'attente obtiendra également la valeur des nouveaux voisins.
A visité. Ajouter (voisin)
L'appel de fonction est fait avec le tableau visité, l'ensemble du graphique et le nœud en tant que paramètre.
BFS (visité, graphique, «5»)
Après avoir utilisé ce code, vous pouvez voir la sortie pertinente via la console résultante en utilisant le bouton d'exécution en haut de la barre d'outils.
Vous pouvez voir que tout le chemin sera accessible via les nœuds. Une chose peut être observée ici: tous ces nœuds de départ sont affichés uniquement parce que chaque fois avant la fonction d'impression, ces nœuds sont sortis de la file d'attente.
Exemple 2
Cet exemple fonctionne sur la même technique: rechercher à l'intérieur du graphique ou d'un arbre. Mais ici, nous avons utilisé l'approche de la POO (programmation orientée objet) dans Python en utilisant le système de classe. Alors d'abord, nous importerons certaines fonctionnalités de la bibliothèque des collections. Ces fonctionnalités incluent le «DefaultDict» qui contient le dictionnaire en langue python.
En vous déplaçant vers la classe, nous définissons d'abord le nom de classe, et à l'intérieur de la classe, voici le constructeur. Comme les constructeurs sont les fonctionnalités qui sont exécutées automatiquement car nous créons l'objet de la classe. L'objet de la classe est nécessaire pour accéder aux fonctionnalités de classe. Nous créerons également l'objet de la classe Graph plus tard dans l'article. Tout d'abord, le constructeur est défini ici pour initialiser la liste prise comme un graphique.
DefaultDict (liste)
«Est» utilisé pour stocker le graphique dans le dictionnaire par défaut.
Après cela, une fonction est utilisée ici, «ajoutée» pour ajouter le nouveau nœud ou le nouveau bord au graphique. Les nœuds sont également connus sous le nom de bords et sont représentés par 'u,.'En revanche, la distance entre les bords est représentée par le sommet et est mentionnée par' V.'Ainsi, à l'intérieur de la fonction, le graphique sera diverti avec de nouveaux nœuds via la fonction d'ajout.
Soi.graphique [u]. Ajouter (v)Ici, nous avons également utilisé une fonction pour afficher le BFS d'un graphique. Initialement, tous les nœuds sont déclarés car ils ne sont pas visités. Dans la première étape de la recherche, nous déclarerons le statut comme faux.
Visité = [false] * (max (self.graphique) + 1)De même, la file d'attente est initialisée comme zéro au moment de la création.
File d'attente = []Parlons maintenant du nœud source, qui est le premier; Nous allons y entrer dans le tableau visité et l'extraire de la file d'attente comme nous l'avons fait dans le premier exemple.
File d'attente.ajouter (s)Maintenant, une boucle de temps est utilisée pour déshabiller tous les nœuds de la file d'attente, puis imprimera la valeur.
S = file d'attente.pop (0)Après cela, tous les nœuds du voisin adjacent seront extraits de la file d'attente; Si un nœud est déjà visité, cela sera entré dans la file d'attente visitée. Si la déclaration est utilisée pour vérifier si le nœud n'est pas déjà visité, puis ajoutez-le à partir de la file d'attente et entrez-le dans le tableau visité.
G = graph () est en quelque sorte un moyen de créer l'objet du constructeur, et cet objet est en outre utilisé pour appeler la fonction ajoutée avec les valeurs du voisin.
Conclusion
L'article «BFS-Python» contient une brève description de l'étendue-recherche dans le graphique pour traverser chaque nœud. Ce processus de recherche se fait en ayant deux listes qui contiennent les nœuds visités et non visité. Nous avons élaboré le concept en ajoutant deux exemples élémentaires dans le guide.