Adloun

Plus court chemin en nombre d'arêtes

Exercice de TD · niveau 3 (difficile) · NSI (terminale), chapitre 4 — Les graphes

É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 .

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.