OCaml (option informatique) · Chapitre 16 · Application directe du cours
Longueur d'un chemin
Plus courts chemins : Dijkstra · niveau 1 (application)
Énoncé
Écrire longueur adj chemin : la somme des poids le long d'un chemin donné (liste de sommets), ou failwith si une arête manque.
Corrigé
let rec poids_arc adj u v =
match adj.(u) with
| [] -> failwith "arête absente"
| (w, p) :: reste -> if w = v then p else poids_arc_liste reste v
and poids_arc_liste l v =
match l with
| [] -> failwith "arête absente"
| (w, p) :: reste -> if w = v then p else poids_arc_liste reste v
let rec longueur adj chemin =
match chemin with
| [] | [_] -> 0
| u :: (v :: _ as reste) -> poids_arc adj u v + longueur adj reste
On additionne le poids de chaque arête consécutive du chemin. Le motif u :: (v :: _ as reste) (chapitre 9) donne les deux premiers sommets et la queue.
Exercices semblables
- Reconstruire le chemin corrigé
- Floyd-Warshall (toutes les paires) corrigé
- Bellman-Ford (poids négatifs) corrigé
- Graphe pondéré corrigé
- Le pas de relâchement corrigé