↑↓ naviguer · ↵ ouvrir · échap pour fermer

← Tous les algorithmes/Trouver un chemin

Parcours en largeur

Quel est le plus court chemin quand tous les pas ont le même coût ?

Explore la grille en anneaux autour du départ, le plus proche d’abord. Il trouve le chemin qui a le moins de pas.

TempsO(V + E)
MémoireO(V)
Où il est utiliséRecherche de chemin →
L’idée

Le parcours en largeur garde une file de cases à explorer. Il prend la plus ancienne, ajoute ses voisines non visitées à la fin et recommence. Comme la file est premier arrivé, premier sorti, toutes les cases à distance un sont traitées avant celles à distance deux, et ainsi de suite vers l’extérieur.

La première fois qu’il atteint le but, aucun chemin plus court n’existe. Cette garantie ne vaut que si tous les pas ont le même coût : avec des coûts différents, il peut renvoyer le chemin au moins de pas mais au total plus élevé.

Il ne sait pas où est le but, donc il s’étale dans toutes les directions et examine beaucoup de cases.

Essayer

Chargement de la démo…

La grille avec le parcours en largeur sélectionné. Dessinez des murs et regardez la recherche s’étendre en anneau.

Pas à pas
  1. 01Mettre le départ dans une file et le marquer visité.
  2. 02Prendre la case en tête de file.
  3. 03Si c’est le but, remonter les parents mémorisés jusqu’au départ.
  4. 04Sinon, ajouter chaque voisine non visitée en fin de file, en notant d’où elle vient.
  5. 05Répéter jusqu’à ce que la file soit vide : il n’y a alors aucun chemin.
En pseudo-code
function bfs(start, goal):
    queue  = [start]
    parent = {start: none}
    while queue is not empty:
        cell = queue.pop_front()
        if cell == goal: return path_from(parent, goal)
        for n in neighbours(cell):
            if n not in parent:
                parent[n] = cell
                queue.push_back(n)
    return no_path
Son coût
Temps: O(V + E)Mémoire: O(V)

V est le nombre de cases et E les liaisons entre elles ; sur une grille, les deux sont proportionnels au nombre de cases.

Points forts
  • Le moins de pas, garanti.
  • Complet : il trouve un chemin dès qu’il en existe un.
  • Une dizaine de lignes.
Limites
  • Ignore les coûts : le moins de pas n’est pas toujours le moins cher.
  • Ignore où est le but, donc il remplit un disque entier autour du départ.
  • La frontière peut devenir grande.
Où il est utilisé
  • 01Recherche de cheminL’une des cinq recherches que vous pouvez lancer sur des murs que vous dessinez ; ici la frontière est une simple file.
Algorithmes voisins

Parcours en profondeur

Trouver un chemin →

Algorithme de Dijkstra

Trouver un chemin →

A*

Trouver un chemin →