Adloun

NSI (terminale) · Chapitre 4 · Exercice de TD

Plus court chemin en nombre d'arêtes

Les graphes · niveau 3 (difficile)

Énoncé

Plus court chemin en nombre d'arêtes.

Écrire une fonction plus_court_chemin(G, depart, arrivee) renvoyant la liste des sommets formant un plus court chemin (en nombre d'arêtes) entre depart et arrivee, ou None si aucun chemin n'existe.

Corrigé

On effectue un BFS en mémorisant, pour chaque sommet visité, le sommet prédécesseur ; on remonte ensuite ces prédécesseurs depuis l'arrivée.


from collections import deque

def plus_court_chemin(G, depart, arrivee):
    if depart == arrivee:
        return [depart]
    predecesseur = {depart: None}
    file = deque([depart])
    while file:
        u = file.popleft()
        for v in G[u]:
            if v not in predecesseur:
                predecesseur[v] = u
                if v == arrivee:
                    # reconstruction du chemin
                    chemin = [arrivee]
                    while predecesseur[chemin[-1]] is not None:
                        chemin.append(predecesseur[chemin[-1]])
                    chemin.reverse()
                    return chemin
                file.append(v)
    return None

G = {0: [1, 2], 1: [0, 3], 2: [0, 3], 3: [1, 2, 4], 4: [3]}
print(plus_court_chemin(G, 0, 4))   # [0, 1, 3, 4] ou [0, 2, 3, 4]

La complexité est , celle d'un BFS, plus la reconstruction du chemin en .

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →